如何为Recyclerview写一个通用的adapter

本文介绍了如何创建一个通用的RecyclerView.Adapter,以提高Android开发的效率。通过分析Adapter的主要方法,如onCreateViewHolder、onBindViewHolder等,以及实战示例,展示了如何利用BaseViewHolder简化代码。文中还提到了如何扩展适配器以支持头、尾部视图,并给出了处理不同布局的思路。
摘要由CSDN通过智能技术生成

如何写一个通用的RecyclerView.adapter

项目源码地址https://github.com/jiang111/SuperRecyclerViewAdapter
欢迎star和fork

随着需求的不断修改,在项目中越来越流行使用recyclerview。
那么如何构建出一个通用的adapter来提高我们的快速开发能力。
下面我们就来看看如何构建出一个完善的baseadapter。

1.分析

想要构建出一个很nice的adapter,那你必须得熟悉recyclerview.adapter的执行流程,以及一些常用的方法吧。 通过分析,我们知道adapter中几个主要的方法。

*1. onCreateViewHolder() //用来创建一个viewholder(viewholder必须继承recyclerview.viewholder)

*2. onBindViewHolder() //用来根据当前item的位置进行数据绑定。

*3. getItemViewType() //返回你当前的adapter里有几种item

*4. getItemCount() //返回item的总个数

*5. 还有就是ViewHolder这个类 ,这个类主要用于拿到item中的相关控件

2.实战

既然 viewholder的作用主要是拿到item中相关控件, 那我们完全可以写一个通用的viewholder然后提供一个getview()的方法,让adapter去拿相应的view.进行设置值。
看代码


public class BaseViewHolder extends RecyclerView.ViewHolder {
   

    protected final SparseArray<View> mViews;
    protected View mConvertView;


    public BaseViewHolder(View itemView) {
        super(itemView);
        mViews = new SparseArray<>();
        mConvertView = itemView;
    }


    /**
     * 通过控件的Id获取对应的控件,如果没有则加入mViews,则从item根控件中查找并保存到mViews中
     *
     * @param viewId
     * @return
     */
    public <T extends View> T getView(@IdRes int viewId) {
        View view = mViews.get(viewId);
        if (view == null) {
            view = mConvertView.findViewById(viewId);
            mViews.put(viewId, view);
        }
        return (T) view;
    }

    public View getmConvertView() {
        return mConvertView;
    }


}

下面我们的adapter只需要使用BaseViewHolder,就可以了, 不需要在新建viewholder了。

public abstract class BaseAdapter<M> extends RecyclerView.Adapter<BaseViewHolder> {
   


    protected List<M> mLists;
    protected Context mContext;
    protected int layoutID;

    public<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值