package com.example.smart.ui.exclude.adapter
|
|
import android.content.Context
|
import android.view.LayoutInflater
|
import android.view.View
|
import android.view.ViewGroup
|
import android.widget.TextView
|
import androidx.recyclerview.widget.RecyclerView.Adapter
|
import androidx.recyclerview.widget.RecyclerView.ViewHolder
|
import com.example.basecore.widget.CheckBoxSample
|
import com.example.smart.R
|
import com.example.smart.ui.projectevent.bean.SystemTreeBean
|
|
|
class PassCAdapter(
|
private val mContext: Context,
|
var data: ArrayList<SystemTreeBean>,
|
val projectId: String,
|
val selectItems: ArrayList<String>
|
) : Adapter<PassCAdapter.PageViewHolder>() {
|
|
/**
|
* 全选集合,为了解决一个adapter多个数据源的问题,
|
* @param key parent_id
|
* @param value 是否全选
|
*/
|
private val allMap = mutableMapOf<Int, Boolean>()
|
|
init {
|
handleSourceDataState()
|
}
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PageViewHolder {
|
return PageViewHolder(
|
LayoutInflater.from(mContext).inflate(R.layout.item_exlcude_problem_view, parent, false)
|
)
|
}
|
|
override fun getItemCount() = if (data.isNotEmpty()) data.size + 1 else 0
|
|
override fun onBindViewHolder(holder: PageViewHolder, position: Int) {
|
|
val realPosition = position - 1
|
if (position == 0) {
|
holder.contentTv.text = "全选"
|
val parentId = findParentId()
|
val isSelect = allMap[parentId] ?: false
|
if (isSelect) {
|
holder.checkbox.setChecked(true, false)
|
} else {
|
holder.checkbox.setChecked(false, false)
|
}
|
} else {
|
val bean = data[realPosition]
|
holder.contentTv.text = bean.name
|
if (selectItems.contains(bean.path)) {
|
holder.checkbox.setChecked(true, false)
|
} else {
|
holder.checkbox.setChecked(false, false)
|
}
|
}
|
|
holder.checkbox.setOnClickListener {
|
if (position == 0) {
|
val parentId = findParentId()
|
val isSelect = allMap[parentId] ?: false
|
allMap[parentId] = !isSelect
|
selectAll(!isSelect)
|
} else {
|
val bean = data[realPosition]
|
holder.checkbox.toggle()
|
if (selectItems.contains(bean.path)) {
|
selectItems.remove(bean.path)
|
} else {
|
selectItems.add(bean.path)
|
}
|
handleSourceDataState()
|
notifyDataSetChanged()
|
}
|
}
|
}
|
|
/**
|
* selectItems 包含所有的选项,不能全部清除
|
*/
|
private fun selectAll(isSelect: Boolean) {
|
for (bean in data) {
|
if (isSelect) {
|
if (!selectItems.contains(bean.path))
|
selectItems.add(bean.path)
|
} else {
|
selectItems.remove(bean.path)
|
}
|
}
|
notifyDataSetChanged()
|
}
|
|
fun notifyCChanged(newItem: List<SystemTreeBean>) {
|
data = newItem as ArrayList<SystemTreeBean>
|
handleSourceDataState()
|
notifyDataSetChanged()
|
}
|
|
/**
|
* find is select all by source data
|
*/
|
private fun handleSourceDataState() {
|
val parentId = findParentId()
|
val selectedState = getAllSelectedState()
|
allMap[parentId] = selectedState
|
}
|
|
private fun getAllSelectedState(): Boolean {
|
for (m in data) {
|
if (!selectItems.contains(m.path)) {
|
return false
|
}
|
}
|
return true
|
}
|
|
private fun findParentId(): Int {
|
if (data.isNotEmpty()) {
|
return data[0].childIdCnt
|
}
|
return 0
|
}
|
|
inner class PageViewHolder(itemView: View) : ViewHolder(itemView) {
|
val contentTv: TextView
|
val checkbox: CheckBoxSample
|
|
init {
|
contentTv = itemView.findViewById(R.id.content_tv)
|
checkbox = itemView.findViewById(R.id.checkbox)
|
}
|
}
|
|
}
|