Android什么是setVariable(BR.xyz,model)和databinding.setXYZ(model)之间的区别

时间:2016-02-10 07:38:25

标签: android android-layout android-databinding

我正在研究android数据绑定,并遇到了我们可以使用以下两种方式设置模型的场景:

 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);

任何人都能解释一下这两者之间有什么区别吗?

用户模型:

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

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

2 个答案:

答案 0 :(得分:10)

他们做同样的事情。根据{{​​3}},有时无法确定变量的类型,因此您必须使用setVariable()方法。在正常情况下,将生成setX()方法。最好使用生成的方法。

答案 1 :(得分:9)

考虑这种情况,当你有一个不共享公共绑定布局的抽象类时(当然除了所有绑定布局继承的超类ViewDataBinding):

public abstract classs EditorActivityFragment<T extends ViewDataBinding> {

在这个类'onCreateView()中,你将无法使用任何生成的方法将变量设置为绑定,因为除了ViewDataBinding之外没有常见的超类,因此你将被迫使用反射,或者您可以使用便捷方法setVariable()

binding.setVariable(BR.viewModel,myViewModel);

我希望这有助于更好地解释此方法的用例。