ViewBinding 和 BaseQuickAdapter 结合使用,废话不多说,上代码
导入第三方库
"refreshview" : "com.shizhefei:CoolRefreshView:1.0.2",
"quick-adapter" : "com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.10",
开启ViewBinding
android {
....
buildFeatures {
viewBinding = true
}
}
封装BaseAdapter
abstract class BaseAdapter<VB : ViewBinding, T>(data: MutableList<T>? = null) :
BaseQuickAdapter<T, VBViewHolder<VB>>(0, data), LoadMoreModule {
override fun onCreateDefViewHolder(parent: ViewGroup, viewType: Int): VBViewHolder<VB> {
//使用反射来获取实例ViewBinding
val vbClass: Class<VB> =
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VB>
val inflate = vbClass.getDeclaredMethod(
"inflate",
LayoutInflater::class.java,
ViewGroup::class.java,
Boolean::class.java
)
val itemBinding =
inflate.invoke(null, LayoutInflater.from(parent.context), parent, false) as VB
return VBViewHolder(itemBinding, itemBinding.root)
}
}
class VBViewHolder<VB : ViewBinding>(val vb: VB, view: View) : BaseViewHolder(view)
实际使用
private val adapter: BaseAdapter<ItemCityBinding, CommonBean> by lazy {
object :
BaseAdapter<ItemCityBinding, CommonBean>() {
override fun convert(holder: VBViewHolder<ItemCityBinding>, item: CommonBean) {
val itemBinding = holder.vb
itemBinding.tvName.text = item.name
itemBinding.btnLeft.visibleOrGone(item.name == "1")
}
}
}
因为对kotlin语法不熟悉,走了不少坑,目前还在优化中