我正在研究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;
}
}
答案 0 :(得分:10)
他们做同样的事情。根据{{3}},有时无法确定变量的类型,因此您必须使用setVariable()
方法。在正常情况下,将生成setX()
方法。最好使用生成的方法。
答案 1 :(得分:9)
考虑这种情况,当你有一个不共享公共绑定布局的抽象类时(当然除了所有绑定布局继承的超类ViewDataBinding
):
public abstract classs EditorActivityFragment<T extends ViewDataBinding> {
在这个类'onCreateView()
中,你将无法使用任何生成的方法将变量设置为绑定,因为除了ViewDataBinding之外没有常见的超类,因此你将被迫使用反射,或者您可以使用便捷方法setVariable()
:
binding.setVariable(BR.viewModel,myViewModel);
我希望这有助于更好地解释此方法的用例。