使用BaseRecyclerViewAdapterHelper实现树形结构

使用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
    }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
BaseRecyclerViewAdapterHelper(以下简称BRVAH)是一个强大的 RecyclerView 适配器库。它可以方便地实现 RecyclerView 的各种功能,如多类型布局、加载更多、空布局、拖拽移动、侧滑删除等。而 QuickAdapterHelper 则是 BRVAH 的简化版,只保留了最基础的功能,使用起来更加简单。 下面是 QuickAdapterHelper使用方法: 1. 在 app 的 build.gradle 文件中添加以下依赖: ``` dependencies { implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.47' } ``` 2. 创建一个 Adapter 类,并继承 QuickAdapterHelper: ``` public class MyAdapter extends QuickAdapterHelper<String> { public MyAdapter(List<String> data) { super(R.layout.item_layout, data); } @Override protected void convert(QuickViewHolder holder, String item) { // 设置 item 布局中的控件值 holder.setText(R.id.tv_name, item); } } ``` 上面的代码中,R.layout.item_layout 是 item 的布局文件,data 是数据源。在 convert() 方法中,我们可以通过 QuickViewHolder 来设置 item 布局中的控件值。 3. 在 Activity 或 Fragment 中使用 Adapter: ``` RecyclerView recyclerView = findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); MyAdapter adapter = new MyAdapter(data); recyclerView.setAdapter(adapter); ``` 上面的代码中,data 是数据源,通过 MyAdapter 的构造函数传入。最后将 adapter 设置到 RecyclerView 中即可。 这样就完成了一个简单的 RecyclerView 列表展示。如果需要实现更多的功能,可以参考 BRVAH 的文档进行扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值