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