android ViewBinding在BaseQuickAdapter适配器类中使用方法

1,130 阅读1分钟

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进行再一次封装使用,如有好的建议欢迎评论指出。