Android |(十八)RecyclerAdapter框架——BRVAH

目录

一、BaseQuickAdapter

二、使用步骤

(一)框架引入

1.build.grade(project:你的项目)

2.build.grade(Module:app)

(二)基础使用

1.准备工作

2.RecycleView基本配置

3.相关代码


系列文章:

Android |(六)基础控件10 RecycleView 滑动【进阶】-CSDN博客

Android |(十七)Adapter 适配器-CSDN博客

可能用到的知识:
JAVA构造方法

官网:https://github.com/CymChad/BaseRecyclerViewAdapterHelper
官方指南:BRVAH官方使用指南(持续更新) - 简书

最新版本:Releases · CymChad/BaseRecyclerViewAdapterHelper · GitHub

参考指南:RecyclerView框架——BRVAH3.x使用指南

        暑假实习熟悉项目时,发现很多RecyclerView的Adapter类都继承了一个名为BaseQuickAdapter的类,上网查询这是由BRVAH(Base RecyclerViewAdapter Helper)提供的万用适配器,相比原始的适配器,能减少70%的代码。

一、BaseQuickAdapter

/*Kotlin语言
 *继承自RecyclerView.Adapter,并指定泛型参数为VH
 *abstract  抽象类
 *T         数据类型参数,适配器中的数据项类型
 *VH        泛型类型参数,继承自BaseViewHolder
 *@JvmOverloads Kotlin的注解,用于指示编译器为这个构造函数生成额外的重载方法,以便在Java代码中使用时可以提供默认参数值。
 *@LayoutRes    Kotlin的注解,用于指示接下来的参数是一个布局资源ID
 *data          构造函数的另一个参数,是一个可空的MutableList<T>类型,表示数据列表。它有一个默认值null
 *
*/
abstract class BaseQuickAdapter<T, VH : BaseViewHolder>@JvmOverloads constructor(
    @LayoutRes private val layoutResId: Int,
    data: MutableList<T>? = null)

    : RecyclerView.Adapter<VH>() {

}

二、使用步骤

(一)框架引入

1.build.grade(project:你的项目)

注意:如果编译报错如下,说明重复配置了repositories。

Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by build file 'build.gradle'

解决方案:删除多余的repositories定义,比如settings.gradle中的定义
注意:不要忘了将原来settings.grade中的其他设置迁移到repositories,比如google() mavenCentral()等

建议:可以全局搜索关键字:repositories,保证只在根目录的build.gradle中定义,其他gradle中的repositories定义删除即可。

//若为build.grade.kts文件
//一定是allprojects里面,不是buildscript
allprojects {
    repositories { 
        maven { 
            setUrl ("https://jitpack.io") 
        }
    }
}
//若为build.grade文件
allprojects {
   repositories {
      maven { url "https://jitpack.io" }
    }
}

2.build.grade(Module:app)

//BRAVH从2.x升级到3.x为不完全兼容升级,不同版本之间的代码差异可能较大
//这里以3.0.11为例
implementation("com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.11")

(二)基础使用

需求:显示多张图片及其名称

1.准备工作

(1)itemBean实体类:存储 图片名称和图片资源Id

package com.example.brvah3.bean;

public class itemBean {
    //存储图片名称 图片路径
    private String imgName;
    private int imgResId;

    //构造函数、get和set方法(此处省略)
}

2.RecycleView基本配置

(1)RecycleView + item_data.xml + 适配器

(2)3项初始化

(3)设置适配器 recyclerView.setAdapter(adapter);

3.相关代码

建议将代码敲下来,认真理解

package com.example.recycleview.BRVAH3;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.example.recycleview.BRVAH3.bean.itemBean;
import com.example.recycleview.R;

import java.util.List;

/**
 * 两个泛型:数据类型 和 ViewHolder(一般直接写BaseViewHolder)
 */
public class Adapter extends BaseQuickAdapter<itemBean, BaseViewHolder> {

    /** 构造函数1,只接受布局资源ID,初始化适配器时不带数据*/
    public Adapter(int layoutResId) {
        super(layoutResId); // 调用父类的构造函数
    }

    /** 构造函数2,接受布局资源ID和数据列表,初始化适配器时带数据
     * @param data 初始数据列表,可以为null
     */
    public Adapter(int layoutResId, @Nullable List<itemBean> data) {
        super(layoutResId, data); // 调用父类的构造函数,并传递数据列表
    }

    /**convert:将数据绑定到视图
     * 需要重写以实现数据到视图的绑定逻辑
     * @param helper 当前item的ViewHolder(名字是自己改的)
     * @param item 当前item的数据对象
     */
    @Override
    protected void convert(@NonNull final BaseViewHolder helper, itemBean item) {
        helper.setText(R.id.tv_name,item.getImgName());
        helper.setImageResource(R.id.iv_image,item.getImgResId());
    }
}

package com.example.recycleview.BRVAH3;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import com.example.recycleview.BRVAH3.bean.itemBean;
import com.example.recycleview.R;

import java.util.ArrayList;
import java.util.List;

public class MainActivity3 extends AppCompatActivity {

    //名称
    private String imgName[] ={
            "苹果","香蕉","荔枝","梨","菠萝","西瓜",
            "苹果","香蕉","荔枝","梨","菠萝","西瓜",
            "苹果","香蕉","荔枝","梨","菠萝","西瓜",
            "苹果","香蕉","荔枝","梨","菠萝","西瓜"};
    //图片
    private int imgResId[] = {
            R.drawable.apple,R.drawable.banana, R.drawable.litchi,R.drawable.pear,R.drawable.pineapple,R.drawable.watermelon,
            R.drawable.apple,R.drawable.banana, R.drawable.litchi,R.drawable.pear, R.drawable.pineapple,R.drawable.watermelon,
            R.drawable.apple,R.drawable.banana, R.drawable.litchi,R.drawable.pear,R.drawable.pineapple,R.drawable.watermelon,
            R.drawable.apple,R.drawable.banana, R.drawable.litchi,R.drawable.pear,R.drawable.pineapple,R.drawable.watermelon,};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        //初始化RecyclerView
        RecyclerView recyclerView = findViewById(R.id.recyclerBRVAH3);
        recyclerView.setLayoutManager(new GridLayoutManager(this,3));
        //初始化数据
        List<itemBean> dataList = initData();
        //初始化适配器
        Adapter adapter = new Adapter(R.layout.item_data);
        adapter.setNewInstance(dataList);

        //设置适配器
        recyclerView.setAdapter(adapter);
    }
    public List<itemBean> initData(){
        List<itemBean> dataList = new ArrayList<>();
        for (int i = 1;i< imgName.length;i++){
            dataList.add(new itemBean(imgName[i],imgResId[i]));
        }
        return dataList;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="15dp"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/iv_image"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:scaleType="fitXY"
        android:src="@drawable/apple" />


    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="苹果"
        android:layout_gravity="center"
        android:textSize="22sp"
        android:textStyle="bold" />

</LinearLayout>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值