web-dev-qa-db-ja.com

Androidデータバインディングが機能しない

Android Data Bindingを使用して簡単なテスト例を実行しようとしています。フラグメントに"test"という名前のEditTextのテキスト"title"のみを表示したいのですが、このテキストは表示されません。これが私のコードです:

TestVM.Java

public class TestVM extends BaseObservable {

    public TestVM() {}

    @Bindable
    public String getText() {
        return "test";
    }
}

fr_login.xml

<layout xmlns:Android="http://schemas.Android.com/apk/res/Android">

<data>
    <variable
        name="test"
        type="de.theappguys.templateandroid.viewmodel.TestVM"/>
</data>

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@Android:color/transparent"
    >

 <TextView
            Android:id="@+id/title"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentLeft="true"
            Android:layout_marginTop="20dp"
            Android:text="@{test.text}"
            Android:textSize="22sp"
            Android:textStyle="bold"
            Android:textColor="@Android:color/black"
            />

</RelativeLayout>
</layout>

FrLogin.Java

@EFragment
public class FrLogin extends Fragment {

...

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    FrLoginBinding binding = DataBindingUtil.inflate(inflater, R.layout.fr_login, container, false);

    return binding.getRoot();
}

...

build.gradle

Android {

.....

   dataBinding {
       enabled = true
   }

....
}
11
IrApp

あなたはあなたのバインディングに値を設定する必要があります

FrLoginBinding binding = DataBindingUtil.inflate(inflater, R.layout.fr_login, container, false);
binding.setTest(new TestVM());

コードの問題は、モデルとFragmentの間に関係がないことです。

8
Ravi Rupareliya

ViewModelもバインドする必要があります。例えば

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    FrLoginBinding binding = DataBindingUtil.inflate(inflater, R.layout.fr_login, container, false);
    binding.setTest(new TestVM());
    return binding.getRoot();
}
6
Blackbelt
     private Context mContent;

     @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {

        FragmentBrandBinding binding = FragmentBrandBinding.inflate(inflater, container, false);
        View view = binding.getRoot();
        mContent = view.getContext();
        return view;
      }
0
Mohsinali