【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

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

相关推荐
智算菩萨1 小时前
MP3音频编码原理深度解析与Python全参数调优实战:从心理声学模型到LAME编码器精细控制
android·python·音视频
studyForMokey3 小时前
【Android面试】Activity生命周期专题
android·面试·职场和发展
chehaoman3 小时前
MySQL的索引
android·数据库·mysql
恋猫de小郭6 小时前
React Native 鸿蒙 2026 路线发布,为什么它的适配成本那么高?
android·前端·react native
studyForMokey7 小时前
【Android面试】窗口机制专题
android·面试·职场和发展
用户013201436038 小时前
Android 资源管理与常用布局详解|基础入门
android
陆业聪8 小时前
从 OpenClaw 到 Android:Harness Engineering 是怎么让 Agent 变得可用的
android·人工智能·ai编程
stevenzqzq10 小时前
颜色透明度转换技术文档(Android/Compose)
android
巴黎没有摩天轮Li11 小时前
Android JVMTI 接入流程
android
2501_9159090611 小时前
iOS 抓包不越狱,代理抓包 和 数据线直连抓包两种实现方式
android·ios·小程序·https·uni-app·iphone·webview