使用BaseRecyclerViewAdapterHelper实现树形结构_com.github.cymchad:baserecyclerviewadapterhelper:3-程序员宅基地

技术标签: android  

使用BaseRecyclerViewAdapterHelper实现树形结构

成品图

最后的成品图

先依赖

首先

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

然后

 implementation	'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'

数据bean

const val ONE = 1;
const val TWO = 2;
const val THREE = 3;

data class TreeOne(
    var label: String,
    var id: String
): AbstractExpandableItem<TreeTwo>(),MultiItemEntity {
    
    override fun getItemType(): Int {
    
        return ONE;
    }
    override fun getLevel(): Int {
    
        return ONE;
    }
}

data class TreeTwo(
    var label: String,
    var id: String
) : AbstractExpandableItem<TreeThree>(), MultiItemEntity {
    
    var treeOne:TreeOne? = null
        set(value){
    
            field= value
        }
        get() = field
    override fun getItemType(): Int {
    
        return TWO;
    }
    override fun getLevel(): Int {
    
        return TWO;
    }
}

data class TreeThree(
    var label: String,
    var id: String
): MultiItemEntity {
    
    var treeTwo:TreeTwo? = null
        set(value){
    
            field= value
        }
        get() = field
    override fun getItemType(): Int {
    
        return THREE
    }
}

写adapter

class TreeAdapter(data: MutableList<MultiItemEntity>?) :
    BaseMultiItemQuickAdapter<MultiItemEntity, BaseViewHolder>(data) {
    

    init {
    
        addItemType(ONE, R.layout.level_one)
        addItemType(TWO, R.layout.level_two)
        addItemType(THREE, R.layout.level_three)
    }

    override fun convert(holder: BaseViewHolder?, item: MultiItemEntity?) {
    
        when (item?.itemType) {
    
            ONE -> {
    
                val treeOne = item as TreeOne
                holder?.setText(R.id.label, treeOne.label)
                holder?.itemView?.setOnClickListener {
    
                    val adapterPosition = holder.adapterPosition
                    if (treeOne.isExpanded) {
    
                        collapse(adapterPosition)
                    } else {
    
                        expand(adapterPosition)
                    }
                }
            }
            TWO -> {
    
                val treeTwo = item as TreeTwo
                holder?.setText(R.id.label, treeTwo.label)
                holder?.itemView?.setOnClickListener {
    
                    val adapterPosition = holder.adapterPosition
                    if (treeTwo.isExpanded) {
    
                        collapse(adapterPosition)
                    } else {
    
                        expand(adapterPosition)
                    }
                }
            }
            THREE -> {
    
                val TreeThree = item as TreeThree
                holder?.setText(R.id.label, TreeThree.label)
            }
        }
    }
}

在界面中使用

  private var treeList: MutableList<MultiItemEntity> = ArrayList();

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    
        super.onViewCreated(view, savedInstanceState)

        val sampleTree1 = TreeOne("0一级分类1", "111")
        val sampleTree2 = TreeOne("0一级分类2", "112")

        val TreeTwo1 = TreeTwo("1二级分类", "222")
        //二级加三级
        var treeThree = TreeThree("2三级分类312", "333")
        var treeThree2 = TreeThree("2三级分类312", "333")
        treeThree.treeTwo = TreeTwo1
        treeThree2.treeTwo = TreeTwo1
        TreeTwo1.addSubItem(treeThree)
        TreeTwo1.addSubItem(treeThree2)

        val TreeTwo2 = TreeTwo("1二级分类", "222")
        //二级加三级
        TreeTwo2.addSubItem(TreeThree("2三级分类312", "333"))
        TreeTwo2.addSubItem(TreeThree("2三级分类313", "333"))

        //加二级分类
        sampleTree1.addSubItem(TreeTwo1)
        sampleTree1.addSubItem(TreeTwo2)

        treeList.add(sampleTree1)
        treeList.add(sampleTree2)

       	var treeAdapterJa = TreeAdapter(treeList)
		treeAdapterJa.setOnItemClickListener {
     adapter, view, position ->
            if (treeList[position].itemType==THREE){
    
               var treeThree:TreeThree = adapter.data[position] as TreeThree
                Log.e(TAG, treeThree.treeTwo?.label!! )
            }
        }
        mBinding?.recyclerView?.layoutManager = LinearLayoutManager(context)
        mBinding?.recyclerView?.adapter = treeAdapterJa
    }

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35880671/article/details/118679102

智能推荐

qpython3l库下载_这个Python库竟然可以偷懒,和import说再见!-程序员宅基地

文章浏览阅读62次。### Data Wranglingpd = LazyImport(“import pandas as pd”)np = LazyImport(“import numpy as np”)dd = LazyImport(“from dask import dataframe as dd”)SparkContext = LazyImport(“from pyspark import SparkCont..._qpython 3l 安装tenserflow

linux下Apache的部署_ipach部署-程序员宅基地

文章浏览阅读837次。一、linux下的网络服务1.http 浏览器默认访问端口是802.默认访问目录是/var/www/html 的index.html超文本编辑语言 编辑:hello 在阿帕奇可以看到3.测试: 配置ip,配置yum源4.下载服务:yum install httpd-manual yum install httpd -y systemctl restart httpd ..._ipach部署

尚学堂JAVA第8章答案参考-程序员宅基地

文章浏览阅读1.3k次。本人初学JAVA,自己写的答案,仅供参考。如有错误或可以优化的地方请各位留言指正。谢谢!验证键盘输入的用户名不能为空,长度大于6,不能有数字。提示:使用字符串String类的相关方法完成可以使用Scanner的nextLine()方法,该方法可以接口空的字符串。import java.util.Scanner;public class Task1 { public static ...

一招解决robotframework报错“command: pybot.bat --argumentfile”-程序员宅基地

文章浏览阅读2.2w次,点赞14次,收藏26次。Robotframework安装完成后,运行case报如下错误,command: pybot.bat --argumentfile c:\users\18082192\appdata\local\temp\RIDEczqo0o.d\argfile.txt --listener “D:\Program Files\Python27\lib\site-packages\robotide\contr..._command: pybot.bat --argumentfile

浅谈百度地图的简单开发之结合方向传感器实现定位功能(三)_百度地图测试路况所用到的传感器-程序员宅基地

文章浏览阅读1.4w次,点赞8次,收藏20次。今天我们来谈下百度地图的定位功能,在此之前我已经将百度地图的基本地图大概说了下,其实百度地图的基本功能还有很多的内容。感兴趣的可以到百度地图的开发者的官网看看。今天就开始来讲下百度地图中的定位功能。今天所讲的百度地图所涉及的内容主要有:基本定位的实现,自定义定位图标,结合方向传感器定位,选择定位中的几种模式(罗盘模式,普通模式,跟随模式)。一、基本定位的实现:所谓定位无非就是获取到一个_百度地图测试路况所用到的传感器

python numpy 对西瓜数据小样进行 k-means 聚类_在西瓜数据集上应用k均值聚类算法对西瓜进行聚类-程序员宅基地

文章浏览阅读532次。聚类能自己写吗_在西瓜数据集上应用k均值聚类算法对西瓜进行聚类

随便推点

蓝湖同步网盘:自动获取团队切图文件-程序员宅基地

文章浏览阅读556次。Hey,大佬们,安装蓝湖同步网盘,不用下载,即可自动获取团队切图文件,团队成员还能共享设计资源,避免文件丢失,了解一下?工程师和设计师等团队成员工作紧密,需要经常通过微信、QQ 接收团队项目相关的切图文件。文件一旦有修改,繁琐的沟通、反复地接收下载切图文件,会占用许多工作时间,不能高效集中地编程,甚至会因此导致加班。“蓝湖网盘”的出现,完美地绕开了这些弊端,直通罗马,让工程师摆脱繁..._蓝湖团队文件整体下载

SpringCloud微服务学习_fail-fast: true-程序员宅基地

文章浏览阅读217次。SpringCloud微服务pdf学习:https://download.csdn.net/download/chen_jia_hao/11263144SpringCloud微服务中文官方文档:https://springcloud.cc/SpringCloud微服务英文官方文档:https://spring.io/projects/spring-cloud/这里主要讲SpringCl..._fail-fast: true

让Source Insight的头文件和实现文件快捷键打开的方式_source insight打开头文件-程序员宅基地

文章浏览阅读5.7k次。source insight并没有提供这样的快捷键,有时候用着比较烦人。终于找到了方法:使用宏命令,并设置快捷键与之绑定。1、打开source insight,Project -> Open Project,打开Base项目,注:Base项目是source insight默认已经创建的。2、打开Utils.em文件,在该文件的末尾加入如下内容:/* cpp和hpp_source insight打开头文件

为什么卷积要翻转/为什么深度学习卷积不翻转/卷积和相关_卷积为什么要翻转-程序员宅基地

文章浏览阅读4.8k次,点赞4次,收藏23次。所以究其原因,是因为“时间的相对”,x(t’)过去1秒后,对“现在t"的影响力度是h(1);x(t’’)过去2秒后,对“现在t"的影响力度是h(2);…站在现在时刻t,向左看,看到的是h(3),h(2),h(1),h(0),倒过来的参考..._卷积为什么要翻转

查询SSAS日志改为由表生成_查看 ssas 错误日志-程序员宅基地

文章浏览阅读572次。1、用SSMS工具打开SSAS2、打开属性3、属性Log\QueryLog\CreateQueryLogTable:该属性是否由表生成Log\QueryLog\QueryLogConnectionString:如果上个属性设置为True,则该属性就是配置日志表生成的库Log\QueryLog\QueryLogSamling:用户访问多少次才会记录到表中一条记录Log\Que_查看 ssas 错误日志

主题:实用且不花哨的js代码大全(转自http://www.javaeye.com/topic/151440)-程序员宅基地

文章浏览阅读385次。事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode event.shiftKey event.altKey event.ctrlKey 事件返回值 e...