DylanCaiCoding / ViewBindingKTX

The most comprehensive utils of ViewBinding. (最全面的 ViewBinding 工具,支持 Kotlin 和 Java 用法,支持 BRVAH,支持封装到基类,支持 DataBinding,支持选择是否使用反射)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

请问下BindingViewHolder文件中的ListAdapter是怎么用的?

kystudio opened this issue · comments

如题

没想到有人注意到这个,奖励你一朵小红花。

MainActivity 有使用的示例。

private val adapter = ListAdapter<Foo, ItemFooBinding>(DiffCallback()) {
  binding.tvFoo.text = it.value
}

class DiffCallback : DiffUtil.ItemCallback<Foo>() {
  override fun areItemsTheSame(oldItem: Foo, newItem: Foo) = oldItem.value == newItem.value
  override fun areContentsTheSame(oldItem: Foo, newItem: Foo) = oldItem.value == newItem.value
}

这里的 ListAdapter 不是 ListView 的适配器,是官方用 RecyclerView.Adapter 结合 DiffUtil 封装的适配器,构造函数需要传个 DiffUtil.ItemCallback 的参数,有兴趣自己去了解一下,挺好用的。

我之前想尝试不写适配器类,直接把适配器对象定义出来,所以就对 ListAdapter 封装了上面的用法。用起来挺简洁的,但是会让 Activity 的可读性差一点,而且这样写的适配器不能复用,感觉还是另写一个适配器类更好。不过封装的代码也就 10 行,所以暂时保留着想再多尝试一下。

目前并不是很推荐这样用,也没有写到 Wiki 文档里,后续可能会把这部分代码去掉。

val foo5Adapter = ListAdapter(diffCallback, ItemFooBinding::inflate) { item ->
binding.tvName.text = item.name
onItemClick {
Toast.makeText(
requireContext(),
"foo5Adapter 点击了${item.name}, position: $it",
Toast.LENGTH_SHORT
)
.show()
}
}
foo5Adapter.submitList(data)

我之前已经这么写了,后来忘了写过。。。