阅读 3136

使用Databinding配合BaseQuickAdapter遇到的坑

1.从集成开始 ,由于是使用kotlin写的,一定要加上“kotlin-kapt”这个插件,不加就会报错

apply plugin: 'kotlin-kapt'//需要使用kapt作为注解 处理器  android { 
        ...
   //数据绑定 
   dataBinding {     
       enabled = true  
      }
}
复制代码

2.在列表中配合BaseQuickAdapter使用Databinding绑定数据,RecyclerView的item布局先写好,然后在这个布局的最外层的布局使用快捷键Alt+Enter就会出现这个提示框,选第一个就会自动生成一个data代码块,在这个代码块中,我添加了item所对应的数据实体,就是type对应的那个地址。

3.由于我的列表中需要展示图片,这时就需要自定义一个下载图片的方法:

@BindingAdapter(value = ["app:url", "app:holderResId"])//value后面可自定义自己需要的属性
@JvmStatic //kotlin的话,除了 @BindingAdapter("XXX") 注解之外必须还要加上 @JvmStatic,不然会报错
复制代码

重点是这两个注解,@BindingAdapter可传多个属性,在xml中进行引用,我这里是一个下载链接,和一个加载过程图需要从xml中获取:

4.在item布局中我需要加载一张图片,一个标题,和一个是否关注的小红花标签

这个就是在@BindingAdapter中定义的两个属性,用name来取出自己想要的图片地址,holderResId则是引用drawable下的一张默认加载图片,图片部分的代码就完成了

标题部分就比较简单了:

是否关注的标签部分 就包含一个三元运算判断该标签是否展示,这里要注意的是需要再data外层的data代码中添加声明: 才能使用View.VISIBLE

到这里布局部分已完成,再来看看adapter怎么写

contentRV.layoutManager = LinearLayoutManager(context)
var contentAdapter = ContentAdapter()
contentRV.adapter = contentAdapter

class ContentAdapter :  
  BaseQuickAdapter<IndexPreferredDataBean, BaseDataBindingHolder<ItemContentBinding>>(R.layout.item_content)
 {   
 override fun convert( holder: BaseDataBindingHolder<ItemContentBinding>,
        item: IndexPreferredDataBean) {
var itemContentBinding = holder.dataBinding 
if (itemContentBinding != null) {
itemContentBinding.houseList = item
itemContentBinding.executePendingBindings()  }
复制代码

这里的ItemContentBinding是根据布局文件自动生成的类,名称是xml名称首字母打下,后面加Binding,

主要代码是这一部分,我自己的理解是这样就可以将数据绑定到控件上了。

到这里就完成了一个简单的databinding数据绑定了,过程中容易忽略的两点导致异常的地方是 使用kotlin必须注意:1.添加插件apply plugin: 'kotlin-kapt',2.@BindingAdapter注解必须配合@JvmStatic一起使用

写得有点乱,有不正确的地方还请帮我指点一下哦。。

文章分类
Android
文章标签