データバインディングを初めて使用しました。バインディングクラスのinflate()を使用しているとAndroidデータバインディングが機能しません
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="userProfile" type="com.demo.entity.UserProfile"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<TextView
android:id="@+id/username_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:textSize="20sp"
android:textStyle="bold"
android:text="@{userProfile.username}" />
</RelativeLayout>
</layout>
私はhere与えられた文書の第二の方法に従ってアンドロイドにデータバインディングを使用しようとしている:私は以下のようにレイアウトファイルを持っています。私は抽象クラスのDrawerLayoutの一部であるフレームレイアウトに関連するレイアウトを展開しているので、最初のメソッドを使用していません。同じナビゲーションドロワーを複数のアクティビティで使用することができます[に]。
そこで私のコードは次のようになります。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
inflateActivityViewInFrame(R.layout.activity_profile, R.string.action_profile);
initialiseData();
}
private void initialiseData() {
ActivityProfileBinding binding = ActivityProfileBinding.inflate(getLayoutInflater());
UserProfile userProfile = new UserProfile("Croaking Tiger Riding Dragon", 8, 16, 32);
binding.setUserProfile(userProfile);
}
親クラスのinflateActivityViewInFrame()メソッドは、これだけん:
protected void inflateActivityViewInFrame(int layoutId, int titleStringId) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(layoutId, mFrameLayout, false);
mFrameLayout.addView(view);
setupActionBarAndDrawerToggle(titleStringId);
}
コードは罰金コンパイルし、何のログメッセージは、のいずれかではありませんランタイム。 エンティティクラスは、(すべてのプロパティの公開ゲッターが続く)
public class UserProfile {
private final String username;
private final int numContributions;
private final int numBookmarks;
private final int numLikes;
public UserProfile(String username, int numContributions, int numLikes, int numBookmarks) {
this.username = username;
this.numContributions = numContributions;
this.numBookmarks = numBookmarks;
this.numLikes = numLikes;
}
これが機能しない理由の任意の考えですか?
あなたのフィールドがプライベートなので、 – Beloo
@Belooすべてのフィールドはパブリックゲッターを持っています...申し訳ありませんが、それを短く保つためにコードを添付しませんでした:)私は質問で言及したようです:) –
ちょうど、また、バインドされたデータの代わりに定数の文字列が使用されているときに表示されています。 –