web-dev-qa-db-fra.com

La liaison de données Android ne fonctionne pas

J'essaie de faire un exemple de test simple avec Android Data Binding. Je veux seulement montrer dans mon fragment le texte "test" dans la EditText nommée "title", mais ce texte n'est pas affiché. Voici mon code:

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
   }

....
}
9
IrApp

vous devez définir la valeur de votre liaison 

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

Le problème avec votre code est qu’il n’ya aucune connexion entre votre modèle et Fragment.

6
Ravi Rupareliya

vous devez également lier votre ViewModel. Par exemple

@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();
}
5
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