DataBinding踩坑Tips
2016-03-31 小文字
前言
Android官方的MVVM技术Data Binding出来已经有一段时间了,这些天在开发YoYo Github使用后效果还不错,减少了之前大量的冗余代码,也完全取代了各种诸如ButterKnife之类的视图绑定工具。
踩坑–NavigationView的结合
在官方推荐的DrawerLayout侧滑菜单设计模式中,为了简化,统一风格,google为开发者提供了和DrawerLayout配套的NavigationView,一个NavigationView可以包含一个Header区域的独立Layout,以及一套menu菜单项,比如YoYo中的选项栏:
如果想用DataBinding的思路来实现视图与数据绑定需要绕一个弯路;
这里面header部分的视图是单独提供的layout,实践发现如果要用DataBinding则不能在xml内指定该app:headerLayout属性(啰嗦一句,xml故意写的tools:headerLayout是预览作用,运行时并不会生效);必须手动代码插入;
看一下这个单独的layout是怎么写的:
几乎所有的控件和数据的绑定关系我们都成功的写在了xml里面,这样只需要在调用层直接为DataBing实现类设定我们定义的model即可;
developer api指南目前没有其他能解决解决NavigationView的办法,只能通过动态插入视图取巧绕过;
踩坑–Recyclerview.ViewHolder
除了简单的页面绑定,我们还可以绑定到Recyclerview的每一项元素,也就是ViewHolder这一层,这里也需要换一种绑定方式,因为ViewHolder是复用的;
先看一下ViewHodler现在要怎么写:
没错里面什么元素都没有,只有一个必须的ViewDataBinding基类,之所以用基类,是因为我们没办法动态知道每个Viewholder对应的DataBinding是哪一个,这屈居于ViewType;
同理整个ViewHolder关联的控件和数据关系我们也是写在了布局内:
有了ViewHodle和xml,现在把完整的Adapter写一下:
注意观察onBindViewHolder内的实现,我们需要显式设置model,并触发绑定;
小结
DataBinding的技术方案和常规实现有比较大的差异,因此在不熟悉的情况下要尽量多参考开发者api指南;