当前位置:网站首页>Using baserecyclerviewadapterhelper to implement tree structure

Using baserecyclerviewadapterhelper to implement tree structure

2022-06-12 23:09:00 And white

Finished drawings

 Final finished product drawing

Depend on first

First

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

then

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

data 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
    }
}

Write 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)
            }
        }
    }
}

Use... In the interface

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

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

        val sampleTree1 = TreeOne("0 First level classification 1", "111")
        val sampleTree2 = TreeOne("0 First level classification 2", "112")

        val TreeTwo1 = TreeTwo("1 Secondary classification ", "222")
        // Two plus three 
        var treeThree = TreeThree("2 Three levels of classification 312", "333")
        var treeThree2 = TreeThree("2 Three levels of classification 312", "333")
        treeThree.treeTwo = TreeTwo1
        treeThree2.treeTwo = TreeTwo1
        TreeTwo1.addSubItem(treeThree)
        TreeTwo1.addSubItem(treeThree2)

        val TreeTwo2 = TreeTwo("1 Secondary classification ", "222")
        // Two plus three 
        TreeTwo2.addSubItem(TreeThree("2 Three levels of classification 312", "333"))
        TreeTwo2.addSubItem(TreeThree("2 Three levels of classification 313", "333"))

        // Add secondary classification 
        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
    }

原网站

版权声明
本文为[And white]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202281113350693.html