BRVAH官方使用指南(持续更新)

www.recyclerview.org

官方网站:www.recyclerview.org

BRVAH是一个强大的RecyclerAdapter框架(什么是RecyclerView?),它能节约开发者大量的开发时间,集成了大部分列表常用需求解决方案。为什么会有它?请查看「Android开源框架BRVAH由来篇」该框架于2016年4月10号发布的第1个版本到现在已经一年多了,经历了800多次代码提交,140多次版本打包,修复了1000多个问题,获得了9000多star,非常感谢大家的使用以及反馈。
本篇为BRVAH的使用指南以及包含常见问题会第一时间更新最新的使用方法。最新版本请查看releases,由于持续更新。

文章目录

  • 框架引入
  • 优化Adapter代码
    和原始的adapter相对,减少70%的代码量。
  • 添加Item事件
    Item的点击事件
    Item的长按事件
    Item子控件的点击事件
    Item子控件的长按事件
  • 添加列表加载动画
    一行代码轻松切换5种默认动画。
  • 添加头部、尾部
    一行代码搞定,感觉又回到ListView时代。
  • 自动加载
    上拉加载无需监听滑动事件,可自定义加载布局,显示异常提示,自定义异常提示。同时支持下拉加载。
  • 分组布局
    随心定义分组头部。
  • 多布局
    简单配置、无需重写额外方法。
  • 设置空布局
    比Listview的setEmptyView还要好用。
  • 添加拖拽、滑动删除
    开启,监听即可,就是这么简单。
  • 树形列表
    比ExpandableListView还要强大,支持多级。
  • 自定义ViewHolder
    支持自定义ViewHolder,让开发者随心所欲。
  • 扩展框架
    组合第三方框架,轻松实现更多需求定制。

框架引入

先在 build.gradle(Project:XXXX) 的 repositories 添加:

    allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }

然后在 build.gradle(Module:app) 的 dependencies 添加:

    dependencies {
            compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.22'
    }

更新说明:https://github.com/CymChad/BaseRecyclerViewAdapterHelper/releases

注意: 一旦出现加载失败的情况,只有两种情况:
1. 配置没配置好
配置没配置好,有几种情况:
1. 只配置了dependencies
2. 配置repositories,但是位置错了,build.gradle(Project:XXXX) 文件下的repositories有两个,一个是buildscript下面的,一个是allprojects下面的,要配置到allprojects下面才是对的。
3. 版本号前面多一个v,这个是我的锅,在2.1.2版本之前都是带v的,之后(包含2.1.2)都不需要带v。
2. 网络原因(这个就不解释了)

使用Adapter

和原始的adapter相对,减少70%的代码量。

使用代码

public class HomeAdapter extends BaseQuickAdapter<HomeItem, BaseViewHolder> {
   
    public HomeAdapter(int layoutResId, List data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, HomeItem item) {
        helper.setText(R.id.text, item.getTitle());
        helper.setImageResource(R.id.icon, item.getImageResource());
        // 加载网络图片
      Glide.with(mContext).load(item.getUserAvatar()).crossFade().into((ImageView) viewHolder.getView(R.id.iv));
    }
}

注:如果想深入了解的原理可以查看RecyclerView.Adapter优化了吗?

使用

首先需要继承BaseQuickAdapter,然后BaseQuickAdapter<Status, BaseViewHolder>第一个泛型Status是数据实体类型,第二个BaseViewHolder是ViewHolder其目的是为了支持扩展ViewHolder。

赋值

可以直接使用viewHolder对象点相关方法通过传入viewId和数据进行,方法支持链式调用。如果是加载网络图片或自定义view可以通过viewHolder.getView(viewId)获取该控件。

常用方法

  • viewHolder.getLayoutPosition() 获取当前item的position

常见问题

这些问题不是使用该库的问题,但是经常有人问这些问题,所以特意写出来,帮助后续遇到以下问题的开发者们。

为什么有数据不显示?
请检查一下你的RecyclerView是否设置了LayoutManager。

为什么有10条数据,只显示1条?
请检查一下item的布局最外层的Layout是不是layout_height设置了match_parent.

数据状态错乱
这个问题无论是RecyclerView还是ListView不做处理都会出现问题,这个本质上是由于布局重用机制导致的,解决办法是通过数据状态来控制控件的状态,一定要设置状态无论什么状态,ifelse是少不了的,如下代码:

  if(entity.isCheck){
    checkBox.isChecked(true);
  } else {
    checkBox.isChecked(false);
  }

解决缓存问题案例:
- 处理文本框和单选的缓存问题
- 实现三级伸缩,并解决多选框的复用

添加Item事件


Item的点击事件

adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                Log.d(TAG, "onItemClick: ");
                Toast.makeText(ItemClickActivity.this, "onItemClick" + position, Toast.LENGTH_SHORT).show();
            }
        });

Item的长按事件

adapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
                Log.d(TAG, "onItemLongClick: ");
                Toast.makeText(ItemClickActivity.this, "onItemLongClick" + position, Toast.LENGTH_SHORT).show();
                return false;
            }
        });

注意:嵌套recycleView的情况下需要使用你使用 adapter. setOnItemClickListener 来设置点击事件,如果使用recycleView.addOnItemTouchListener会累计添加的。

Item子控件的点击事件
首先在adapter的convert方法里面通过viewHolder.addOnClickListener绑定一下的控件id

 @Override
    protected void convert(BaseViewHolder viewHolder, Status item) {
        viewHolder.setText(R.id.tweetName, item.getUserName())
                .setText(R.id.tweetText, item.getText())
                .setText(R.id.tweetDate, item.getCreatedAt())
                .setVisible(R.id.tweetRT, item.isRetweet())
                .addOnClickListener(R.id.tweetAvatar)
                .addOnClickListener(R.id.tweetName)
                .linkify(R.id.tweetText);

    }

然后在设置

 adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public boolean onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                Log.d(TAG, 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BRVAH 是一个强大的RecyclerView适配器库,它可以实现许多复杂的功能,包括列表无限循环滚动和item可点击。下面是实现这两个功能的步骤: 1. 列表无限循环滚动 BRVAH库提供了一个BannerLayoutHelper类,可以用来实现列表的无限循环滚动,具体步骤如下: (1)在适配器中重写getItemCount()方法,将其返回一个很大的数,比如Integer.MAX_VALUE,这样就可以实现列表的无限循环滚动。 (2)在适配器中重写getItemViewType()方法,根据不同的位置返回不同的viewType,比如第一个位置返回BANNER_VIEW_TYPE,其他位置返回NORMAL_VIEW_TYPE。 (3)在适配器中实现onCreateViewHolder()方法,根据不同的viewType返回不同的ViewHolder,比如BANNER_VIEW_TYPE返回BannerViewHolder,NORMAL_VIEW_TYPE返回NormalViewHolder。 (4)在BannerViewHolder中初始化BannerLayoutHelper,并将其绑定到RecyclerView上。 (5)在NormalViewHolder中将数据绑定到itemView上。 2. item可点击 BRVAH库的ViewHolder已经实现了点击事件的处理,只需要在ViewHolder中实现OnItemClickListener接口并重写onItemClick()方法即可。具体步骤如下: (1)在ViewHolder中实现OnItemClickListener接口。 (2)在ViewHolder的构造方法中将OnItemClickListener传递进来,并保存到类成员变量中。 (3)在itemView的setOnClickListener()方法中调用OnItemClickListener的onItemClick()方法。 示例代码如下: ```java public class NormalViewHolder extends BaseViewHolder<Data> implements View.OnClickListener { private OnItemClickListener mOnItemClickListener; public NormalViewHolder(View itemView, OnItemClickListener onItemClickListener) { super(itemView); mOnItemClickListener = onItemClickListener; itemView.setOnClickListener(this); } @Override public void onClick(View v) { if (mOnItemClickListener != null) { mOnItemClickListener.onItemClick(getAdapterPosition()); } } @Override public void setData(Data data) { // 将数据绑定到itemView上 } } ``` 注意:以上代码只是示例,具体实现可能会有所不同,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值