RecyclerView用这个这个适配器就够了(使用简单/支持上拉加载/自定义加载布局等等)

这篇博客介绍了如何使用一个强大的RecyclerView适配器,简化列表开发,支持上拉加载、自定义加载状态文字和布局。适配器具备开关切换上拉加载功能,能根据场景定制加载提示,并且能够处理多种布局样式。通过代码示例,作者清晰地展示了适配器的使用方法,鼓励读者从GitHub下载源码并提出改进意见。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

![展示图](https://img-blog.csdnimg.cn/20190314153936374.gif)

我们看了效果图,再看一下实现这个效果需要的代码段,个人觉得使用特别简单,已经在项目中使用了半年了。

	final RecyclerView recyclerView = findViewById(R.id.rv_content);
        recyclerView.setLayoutManager(new BaseLinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        baseAdapter.setLoadMore(true);
        //这里可以自定义加载中&加载错误&没有更多显示的文字
	//   baseAdapter.setLoadNoMore("没有更多订单了");  
        baseAdapter.setLoadMoreListener(new BaseAdapter.OnLoadMoreListener() {
            @Override
            public void onLoadMore() {   //上拉更多的回调
                page1++;
                setmData(page1);
            }

            @Override
            public void onErrorClick() { //当网络请求错误时,可以设置为请求错误,点击重新请求的回调
                page1++;
                setmData(page1);
            }
        });
        recyclerView.setAdapter(new BaseAdapter<String>(R.layout.item_order_details_goods, mData) {   //自定义的apdater,接下来会说
	    @Override
	    public void onBindViewHolder(BaseViewHolder holder, ArrayList<String> data, int position) {
	        holder.setText(R.id.tv_order_details_goods_name, mData.get(position));
	    }
	});

看来代码后,是不是特别简单。平时我们在写列表的时候会重复的做好多事情。有了这个强大的apdater后,我们是不是省了好多事情。详细可以查看我的这篇文章。这次是从这个基础上延申而来。强大的adapter

接下来我们看一下baseadapter里面都实现了什么功能。
一,设置是否支持上拉加载的开关,可以随意切换

/**
 * 设置支持加载更多
 *
 * @param loadMore
 */
public void setLoadMore(boolean loadMore) {
    this.isLoadMore = loadMore;
}

二,支持自定义加载过程中的文字展示,比如在订单列表,产品可能要显示《没有更多订单了》而在商品列表,可能又要显示《没有更多商品了》之类的。

/**
 * 设置加载更多文本
 *
 * @param LOAD_MORE
 */
public void setLoadMore(String LOAD_MORE) {
    this.LOAD_MORE = LOAD_MORE;
}

/**
 * 设置没有更多内容了文本
 *
 * @param LOAD_NO_MORE
 */
public void setLoadNoMore(String LOAD_NO_MORE) {
    this.LOAD_NO_MORE = LOAD_NO_MORE;
}

/**
 * 设置加载中文本
 *
 * @param LOADIND
 */
public void setLoading(String LOADIND) {
    this.LOADIND = LOADIND;
}


/**
 * 设置加载失败的文本
 *
 * @param LOAD_ERROR
 */
public void setLoadError(String LOAD_ERROR) {
    this.LOAD_ERROR = LOAD_ERROR;
}

三,可以自定义底部加载的布局,一目了然。一看就懂

/**
 * 重写此方法可以自定义上拉加载的view
 */
public View onCreateFooterView(ViewGroup parent, int layoutResId) {
    return LayoutInflater.from(parent.getContext()).inflate(R.layout.base_adapter_normal_footer, parent, false);
}

四,可以加载多种样式的布局,不会因为使用的新的apdater,而失去了适配器强大的特性

/**
 * 重写此方法和onCreateView可实现viewtype功能
 */
public int getViewType(int position) {
    return NORMAL_TYPE;
}

/**
 * 重写此方法和getViewType可实现viewtype功能
 */
public View onCreateView(ViewGroup parent, int viewType) {
    return LayoutInflater.from(parent.getContext()).inflate(layoutResId, parent, false);
}

可能好多人看了第三和第四条之后会模模糊糊,接下来我们看一下这个在哪里调用的,肯定会使你豁然开朗。

@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    this.parent = parent;
    View view = null;
    switch (viewType) {
        /*case NORMAL_TYPE:
            break;*/
        case LOAD_TYPE:
            view = onCreateFooterView(parent,R.layout.base_adapter_normal_footer);
            break;
        default:
            view = onCreateView(parent, viewType);
            break;
    }
    return new BaseViewHolder(view);
}

是不是清楚了很多。这样简简单单的一个适配器就做好了。源码可以去我的github去下载希望大家多多提意见。共同进步。我不怎么会写博客,大家见谅。 RecyclerView.BaseAdapter源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值