【发布时间】:2021-12-24 04:00:19
【问题描述】:
我正在尝试检查RecyclerView 中的多个项目并删除它们,但在自定义RecyclerViewAdapter 中检查CheckBox 后无法删除。
class TestAdapter(var isSelectingEnabled: Boolean) : RecyclerViewBaseAdapter<TestModel>() {
val selectedList: ArrayList<TestModel>? = null
override fun getLayoutResId(viewType: Int): Int = R.layout.test_list_item
var onItemClick: ((TestModel) -> Unit)? = null
override fun bindData(
holder: SimpleViewHolder<TestModel>,
model: TestModel,
position: Int
) {
val context = holder.itemView.context
val checkBox = holder.itemView.findViewById<MaterialCheckBox>(R.id.checkbox)
holder.itemView.setOnClickListener {
onItemClick?.invoke(model)
}
checkBox.apply {
checkBox.setOnCheckedChangeListener(null)
checkBox.isChecked = model.isSelected
isVisible = isSelectingEnabled
setOnCheckedChangeListener { buttonView, isChecked ->
selectedList?.add(model)
}
}
}
}
在片段中:
private fun removeListItems() {
if (!testAdapter.isSelectingEnabled) {
testAdapter.removeAllItems(arrayList)
arrayList.clear()
binding.buttonBulkAddRemove.isEnabled = false
} else {
if (arrayList.size > 0) {
testAdapter.selectedList?.forEach {
if (arrayList.contains(it)) {
testAdapter.removeItems(it)
arrayList.remove(it)
}
}
}
}
}
在BaseAdapter 类中定义了几个方法:
fun removeItems(model: T): Boolean {
val index = dataList.indexOf(model)
val removed = dataList.remove(model)
if (removed) {
notifyItemRemoved(index)
}
return removed
}
fun removeAllItems(listItems: List<T>) {
dataList.removeAll(listItems)
notifyDataSetChanged()
}
如果我做错了什么,请指导我。
【问题讨论】:
标签: android kotlin android-recyclerview