15

私はAndroidのデータバインディングに取り組んでおり、次の2つの方法を使用してモデルを設定できるというシナリオに出くわしました:

 User user = new User("User", "Abc"); // this is a model
dataBinding.setVariable(BR.user, user);
dataBinding.executePendingBindings(); // and we have to do this... Why?

次のように設定することもできます。

binding.setUser(user);

この2つの違いを説明できる人はいますか?

ユーザー モデル:

public class User{
public String fName;
public String lName;

public User(String fName, String lName){
this.fName = fName;
this.lName = lName;
   }
}
4

3 に答える 3

16

共通のバインディング レイアウトを共有しない抽象クラスがある場合を考えてみましょう (もちろん、ViewDataBindingすべてのバインディング レイアウトが継承するスーパークラスは除きます)。

public abstract classs EditorActivityFragment<T extends ViewDataBinding> {

このクラスonCreateView()では、ViewDataBinding 以外に共通のスーパークラスがないため、生成されたメソッドを使用して変数をバインドに設定することはできません。したがって、リフレクションを使用する必要があります。または、便利なメソッドを使用できますsetVariable()

binding.setVariable(BR.viewModel,myViewModel);

この方法のユースケースをよりよく説明するのに役立つことを願っています.

于 2016-05-21T20:42:30.127 に答える
11

彼らは同じことをします。docsによると、変数の型を判別できない場合があるため、setVariable()メソッドを使用する必要があります。通常の状況では、setX()メソッドが生成されます。生成されたメソッドを使用することをお勧めします。

于 2016-03-25T17:56:42.430 に答える