记录亲踩的使用Databinding的坑
程序包xxx不存在
xml中variable的type或import的全路径,如果路径中某个包名为大写字母开头的,编译后自动生成的类中导入则会从该包后面截断,例如:
<data>
<variable
name="user"
type="com.example.mytest.Mvvm.User" />
<variable
name="networkStatus"
type="String" />
</data>
如果按上述代码中的写法,自动生成的类中的导包为:
import com.example.mytest.Mvvm;
//这样就会导致编译报错,正确的应该是导入User类,而不是导入Mvvm包
//将Mvvm包名改为小写mvvm即可正确导入
import com.example.mytest.mvvm.User;
点击事件无效
关于Databinding如何实现点击事件的绑定,参考这篇文章
如果尝试了上述文章中各种方式依然无法实现点击效果,请往下看
xml中按钮绑定了点击事件的方法,各种写法都试了,都无效。这时就要注意了,也许并不一定是xml中的问题,也可能是Activity中未将处理点击事件的类和xml生成的binding类绑定,绑定方式入下:
<data>
<variable
name="loginVM"
type="com.example.mytest.mvvm.LoginViewModel" />
<Button
android:onClick="loginVM::click"/>
</data>
//Activity
binding = DataBindingUtil.setContentView(this, R.layout.act_mvvm);
viewModel= new LoginViewModel();
//注意!一定要通过binding设置一下,将xml生成的Databinding类和点击事件的类绑定后才会生效,setLoginVM()方法是根据variable自动生成的
binding.setLoginVM(viewModel);
//LoginViewModel
public void click(View v){...};