搭配BRVAH高效使用RecyclerView

学习目标

熟悉使用 BRVAH 解决对应各种 adapter 需求

概述

BRVAH 是 Github 上的一个很棒的开源项目,主要作用是帮助我们更加高效的使用 Recyclerview 控件,处理项目中常见需求的 Adapter,使用起来非常方便,更多介绍可去BRVAH官网查看。

BRVAH 主要是针对 Adapter 来设计的。

BRVAH 为我们提供了一般情况下的BaseQuickAdapter,和几个特定需求下的Adapter,BaseMultiItemQuickAdapter用于复杂类布局列表;BaseItemDraggableAdapter 用于拖拽移动和滑动删除类列表; BaseSectionQuickAdapter用于带 Section 头部 View 的列表。

build.gradle 配置说明

添加资源库

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

添加依赖

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

VERSION_CODE的最新版本可以参考这里

功能概要说明

1. 实现Recyclerview的列表加载动画效果

效果图1

我们只需将自建的 xxAdapter 继承 BRVAH 对应满足需求的 Adapter,然后在 Activity 中实例化,通过openLoadAnimation() 方法完成特定的动画效果。

BRVAH 支持 5 种动画,BaseQuickAdapter.ALPHAIN淡入、BaseQuickAdapter.SLIDEIN_BOTTOM从底部入、BaseQuickAdapter.SLIDEIN_LEFT从左边进入、BaseQuickAdapter.SLIDEIN_RIGHT从右边进入和自定义动画。

关于自定义的动画,可以通过实现 BaseAnimation 这个类,重写
getAnimators(View view) 方法来完成自定义动画。

2. 实现Recyclerview的复杂布局列表

在实际应用中经常会遇到各种样式的列表、宫格和列表同时存在、分类列表等情况。

2.1 Recyclerview 多样式 item 排列的效果

效果图2.1

对于多样式的列表,根据需求创建 type 实体类实现 MultiItemEntity。 xxAdapter继承 BaseMultiItemQuickAdapter类,在构造方法中调用addItemType ()方法加入定义的 itemType 和对应布局,在 Activity 中实例化即可。

2.2 Recyclerview 宫格和列表的混排样式

效果图2.2

关于 Grid 和 List 的混排样式,Grid 样式是一行有多个,而 List 样式是一行只有一个。我们可以把 List 样式看成是 Grid 样式,它就相当于把一个 Grid 的 item 拉长了的样子。

列表与网格混排的布局效果,我们可以创建 xxAdapter 继承 BaseMultiItemQuickAdapter 添加对应 item 类型的布局文件,在 Activity 中创建 GridLayoutManager 对象,设置 spanSize 属性,通过 Adapter 的 setSpanSizeLookup 方法设置每种 item 类型对应的 spanSize。设置 Recyclerview 的 addItemDecoration() 方法设置添加分割线或设置 item 间距。

代码片段:

...
gridLayoutManager = new GridLayoutManager(this,3);
        mRecyclerView.setLayoutManager(gridLayoutManager);
        mAdapter = new GridManagerAdapter(getDataType());
        // 设置横跨度
        // 1:就是横跨1/3
        // 2:就是横跨2/3
        // 3:就是横跨一整行
        mAdapter.setSpanSizeLookup(new BaseQuickAdapter.SpanSizeLookup() {
            @Override
            public int getSpanSize(GridLayoutManager gridLayoutManager, int position) {
                return getDataType().get(position).getSpanSize();
            }
        });
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
            @Override
            public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
                super.getItemOffsets(outRect, view, parent, state);
                GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams)
                        view.getLayoutParams();
                int spanSize = layoutParams.getSpanSize();
                int spanIndex = layoutParams.getSpanIndex();// 从左到右 0~
                if (spanSize == gridLayoutManager.getSpanCount()) {
                    outRect.top = 20;
                }
            }
        });
    // 假设数据
    private List<MultipleItem> getDataType() {
        int type = 0;
        for (int i = 0;i < 13;i++) {
            if (i < 9) {
                type = 1;
            }  
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
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上 } } ``` 注意:以上代码只是示例,具体实现可能会有所不同,需要根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值