【Android】BRVAH多布局实现

前言

基于3.0.4版本的BRVAH框架实现的

实现方法

1.创建多个不同类型的布局(步骤忽略)
2.创建数据实体类

数据类要实现【MultiItemEntity】接口

kotlin 复制代码
class MyMultiItemEntity(
    //获取布局类型
    override var itemType: Int,
    var tractorRes: Int? = null,
    var tractorTitle: String? = null,
    // 4-set 第一种布局需要的数据
    var fourSetFirstName: String? = null,
    var fourSetSecondName: String? = null,
    var fourSetThreeName: String? = null,
    var fourSetFourName: String? = null,
    // 5-set 第二种布局需要的数据
    var fiveSetFirstName: String? = null,
    var fiveSetSecondName: String? = null,
    var fiveSetThreeName: String? = null,
    var fiveSetFourName: String? = null,
    var fiveSetFiveName: String? = null,
    // 6-set 第三种布局需要的数据
    var sixSetFirstName: String? = null,
    var sixSetSecondName: String? = null,
    var sixSetThreeName: String? = null,
    var sixSetFourName: String? = null,
    var sixSetFiveName: String? = null,
    var sixSetSixName: String? = null
) : MultiItemEntity {

   //设置三个字段(因为有三种布局)
    companion object {
        const val TRACTOR_ITEM_FOUR = 0
        const val TRACTOR_ITEM_FIVE = 1
        const val TRACTOR_ITEM_SIX = 2
    }

//使用此构造方法构建第一种布局的数据源
    constructor(
        itemType: Int,
        res: Int,
        title: String,
        first: String,
        second: String,
        three: String,
        four: String
    ) : this(itemType) {
        this.tractorRes = res
        this.tractorTitle = title
        this.fourSetFirstName = first
        this.fourSetSecondName = second
        this.fourSetThreeName = three
        this.fourSetFourName = four
    }
//使用此构造方法构建第二种布局的数据源
    constructor(
        itemType: Int,
        res: Int,
        title: String,
        first: String,
        second: String,
        three: String,
        four: String,
        five: String
    ) : this(itemType) {
        this.tractorRes = res
        this.tractorTitle = title
        this.fiveSetFirstName = first
        this.fiveSetSecondName = second
        this.fiveSetThreeName = three
        this.fiveSetFourName = four
        this.fiveSetFiveName = five
    }
//使用此构造方法构建第三种布局的数据源
    constructor(
        itemType: Int,
        res: Int,
        title: String,
        first: String,
        second: String,
        three: String,
        four: String,
        five: String,
        six: String
    ) : this(itemType) {
        this.tractorRes = res
        this.tractorTitle = title
        this.sixSetFirstName = first
        this.sixSetSecondName = second
        this.sixSetThreeName = three
        this.sixSetFourName = four
        this.sixSetFiveName = five
        this.sixSetSixName = six
    }
}
3.创建Adapter

需要继承自【BaseMultiItemQuickAdapter】

kotlin 复制代码
class SteerAdapter(
    val list: MutableList<MyMultiItemEntity>,
) :
    BaseMultiItemQuickAdapter<MyMultiItemEntity, BaseViewHolder>(list) {


    init {
        addItemType(
            MyMultiItemEntity.TRACTOR_ITEM_FOUR,
            R.layout.item_tractor_second_four_sets
        )
        addItemType(
            MyMultiItemEntity.TRACTOR_ITEM_FIVE,
            R.layout.item_tractor_second_five_sets
        )
        addItemType(
            MyMultiItemEntity.TRACTOR_ITEM_SIX,
            R.layout.item_tractor_second_six_sets
        )
    }

    override fun convert(holder: BaseViewHolder, item: MyMultiItemEntity) {
        when (holder.itemViewType) {
            MyMultiItemEntity.TRACTOR_ITEM_FOUR -> {

}
            MyMultiItemEntity.TRACTOR_ITEM_FIVE -> {
              
}                    

            MyMultiItemEntity.TRACTOR_ITEM_SIX -> {
                    
    }
}

使用

kotlin 复制代码
//        binding.rvList.layoutManager = LinearLayoutManager(context)
//        val myAdapter = SteerAdapter(list)
//        val dp10 = requireContext().resources.getDimensionPixelSize(R.dimen.dp_10)
//        val itemDecoration = object : RecyclerView.ItemDecoration() {
//            override fun getItemOffsets(
//                outRect: Rect,
//                view: View,
//                parent: RecyclerView,
//                state: RecyclerView.State
//            ) {
//                outRect.bottom = dp10
//            }
//        }
//        binding.rvList.addItemDecoration(itemDecoration)
//        binding.rvList.adapter = myAdapter

基本上主要代码就这么多,基本上对着官方代码来就可以了,但是有一点就是官方代码对于数据类的构建讲的比较粗略,这篇笔记也是对这个进行补充吧。

相关推荐
峥嵘life7 小时前
五一南昌第三天游玩记录:梅景寻芳,母校忆旧,摩天轮揽夜
android
qq_452396238 小时前
第三篇:《JMeter断言:验证接口响应正确性》
android·jmeter
aqi008 小时前
一文速览 HarmonyOS 6.0.1 引入的十个新特性
android·华为·harmonyos·鸿蒙·harmony
橙子199110169 小时前
Android 第三方框架 相关
android
赏金术士10 小时前
JetPack Compose 弹窗、菜单、交互组件(五)
android·kotlin·交互·android jetpack·compose
海天鹰10 小时前
高版本安卓老应用下面空白
android
猫的玖月11 小时前
(七)函数
android·数据库·sql
秋911 小时前
java中对操作mysql8.0.46与MySQL9.7.0有什么区别,并举例说明
android·java·adb