18034727885
2026-06-26 253f680fb9666751e0f9a8e5e8f2f9e3eb1894e3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.example.smart.ui.exclude.adapter
 
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView.Adapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.example.basecore.widget.LoadingLayout
import com.example.smart.R
import com.example.smart.ui.exclude.ExcludeActivity
import com.example.smart.ui.exclude.view.HRecyclerview
import com.example.smart.ui.exclude.view.PassCRecyclerview
import com.example.smart.ui.exclude.view.VRecyclerview
import com.example.smart.ui.projectevent.bean.SystemTreeBean
import java.util.ArrayList
 
/**
 * 树层级1-3-4-6
 * 而第一层是最顶层的,不包含横竖ui
 */
class ContentAdapter(
    private val mContext: Context,
    val data: List<SystemTreeBean>,
    val id: String,
    val selectItem: ArrayList<String>
) : Adapter<ContentAdapter.PageViewHolder>() {
 
    override fun onBindViewHolder(holder: PageViewHolder, position: Int) {
        if (data.isEmpty()) {
            return
        }
        if (data[position].children.isNullOrEmpty()) {
            return
        }
 
        //3级树,竖向
        val thirdTree = data[position].children
        bindV(holder, thirdTree)
 
        //4级树,横向
        val selectItem = holder.vView.getSelectItem()
        if (selectItem < 0 || selectItem >= thirdTree.size) {
            return
        }
        val selectedThirdTree = thirdTree[selectItem]
        val selectedChildren = selectedThirdTree.children
        if (selectedChildren.isNullOrEmpty()) {
            return
        }
        val firstChild = selectedChildren[0]
        val vChild = firstChild.children
        if (!vChild.isNullOrEmpty()) {
            bindH(holder, vChild)
        }
 
        //6级树,内容
        val hSelectItem = holder.hView.getSelectItem()
        if (!vChild.isNullOrEmpty() && hSelectItem >= 0 && hSelectItem < vChild.size) {
            bindC(holder, vChild[hSelectItem].children)
        }
    }
 
    private fun bindV(holder: PageViewHolder, childTrees: ArrayList<SystemTreeBean>) {
        holder.vView.bindData(id, childTrees, object : TreeBaseAdapter.OnTreeClickEvent {
            override fun onClicked(pos: Int, path: String) {
                if (childTrees.isNotEmpty()) {//一般不会出问题
 
                    val hContent = if (mContext is ExcludeActivity) {
                        childTrees[holder.vView.getSelectItem()].children
 
                    } else{
                        childTrees[holder.vView.getSelectItem()].children[pos].children
                    }
                    holder.hView.onDataChanged(hContent)
                    val hSelectItem = holder.hView.getSelectItem()
                    if (hContent.size > hSelectItem) {
                        val cList = hContent[hSelectItem].children
                        holder.cView.onDataChanged(cList)
                    }
                }
            }
        })
    }
 
    private fun bindH(holder: PageViewHolder, childTrees: ArrayList<SystemTreeBean>) {
        holder.hView.bindData(id, childTrees, object : TreeBaseAdapter.OnTreeClickEvent {
            override fun onClicked(pos: Int, path: String) {
                val hDatas = holder.hView.getHDatas()
                if (hDatas.isNotEmpty() && pos >= 0 && pos < hDatas.size) {
                    holder.cView.onDataChanged(hDatas[pos].children)
                }
            }
        })
    }
 
    private fun bindC(holder: PageViewHolder, childTrees: ArrayList<SystemTreeBean>) {
        holder.cView.bindData(id, childTrees, selectItem)
    }
 
 
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PageViewHolder {
        return PageViewHolder(
            LayoutInflater.from(mContext).inflate(R.layout.item_exclude_content, parent, false)
        )
    }
 
    inner class PageViewHolder(itemView: View) : ViewHolder(itemView) {
 
        val vView: VRecyclerview
        val hView: HRecyclerview
        val cView: PassCRecyclerview
        val loadingView: LoadingLayout
 
        init {
            vView = itemView.findViewById(R.id.recycler_view_v)
            hView = itemView.findViewById(R.id.recycler_view_h)
            cView = itemView.findViewById(R.id.recycler_view_c)
            loadingView = itemView.findViewById(R.id.loading_layout)
 
        }
    }
 
    override fun getItemCount() = data.size
 
}