1.背景
Android经过不断的发展,由传统的xml控件id绑定到自动生成ActivityXXBinding类文件,由xml类文件形成绑定,从而提高开发效率。
本篇文章只是针对于 RecyclerView组件下的BaseQuickAdapter类进行再封装,其中只使用了 viewBinding,dataBinding没有使用,如想看mvvm架构封装,请查看以前我写的文章。
2.启用 ViewBinding
//启用DataBinding
buildFeatures {
dataBinding false
}
//启用ViewBinding
buildFeatures {
viewBinding true
}
3. BaseViewBindingAdapter封装
public abstract class BaseViewBindingAdapter<T, VH extends BaseViewHolder> extends BaseQuickAdapter<T, VH> {
public BaseViewBindingAdapter(int layoutResId, @Nullable List<T> data) {
super(layoutResId, data);
}
public BaseViewBindingAdapter(int layoutResId) {
super(layoutResId);
}
@NotNull
@Override
protected VH onCreateDefViewHolder(@NotNull ViewGroup parent, int viewType) {
return getViewBinding(viewType, LayoutInflater.from(getContext()),parent);
}
protected abstract VH getViewBinding(int viewType, LayoutInflater from, ViewGroup parent);
}
4.BaseViewBindingHolder封装
/**
* author:guoxx
* date: 2022-1-21
* Describe:
*/
public class BaseViewBindingHolder <VB extends ViewBinding> extends BaseViewHolder {
public VB viewBind;
public BaseViewBindingHolder(VB viewBind) {
super(viewBind.getRoot());
this.viewBind = viewBind;
}
public VB getViewBind() {
return viewBind;
}
}
5.示例使用
1.添加适配器adapter
adapter = AlertAdapter(R.layout.item_alert_list)
mBinding.recyclerView.adapter = adapter
2.AlertAdapter类
class AlertAdapter(layoutResId: Int) :
BaseViewBindingAdapter<NoticeMsgBean.DataBean, BaseViewBindingHolder<ItemAlertListBinding>>(
layoutResId
) {
/**
* Implement this method and use the helper to adapt the view to the given item.
*
* 实现此方法,并使用 helper 完成 item 视图的操作
*
* @param holder A fully initialized helper.
* @param item The item that needs to be displayed.
*/
override fun convert(
holder: BaseViewBindingHolder<ItemAlertListBinding>?,
item: NoticeMsgBean.DataBean?
) {
holder?.viewBind?.tvTypeName?.text=item?.title
holder?.viewBind?.tvContent?.text=item?.msgContent
holder?.viewBind?.tvDate?.text=item?.createTime
if(item?.readStatus==0){
holder?.viewBind?.tvStates?.text="未读"
}else{
holder?.viewBind?.tvStates?.text="已读"
}
}
override fun getViewBinding(
viewType: Int,
from: LayoutInflater?,
parent: ViewGroup?
): BaseViewBindingHolder<ItemAlertListBinding> {
return BaseViewBindingHolder(from?.let { ItemAlertListBinding.inflate(it,parent,false) })
}
}
6.最后
以上是对BaseQuickAdapter 类使用ViewBinding进行再一次封装使用,如有好的建议欢迎评论指出。