我正在ExpandableListView
中实现选择模式。单击孩子时,选择会切换。我在每个父母中都有一个CheckBox
,我想从中一次控制所有孩子的选择。
我的问题是,当父项折叠并单击其CheckBox
时,由于空指针异常导致应用程序崩溃,因为当我尝试更改子项的选择时,我找不到子项并且获得空值。但是,当父级展开时,一切正常。
那么,解决此类问题的好方法是什么?
答案 0 :(得分:0)
我通过添加一些代码行而不更改先前的代码来解决问题,因此此答案对于不想用其他方法重写代码的人可能会有所帮助。
在设置了Fragment
的呼叫方Activity
或Adapter
中,添加:
private val isMyGroupExpanded = SparseBooleanArray()
val MyAdapterEV = AdapterEV(/* params */) { isChecked, groupPosition ->
changeSelection(isChecked, groupPosition)
}
// record which groups are expanded and which are not
MyAdapterEV.setOnGroupExpandListener { i -> isMyGroupExpanded.put(i, true) }
MyAdapterEV.setOnGroupCollapseListener { i -> isMyGroupExpanded.put(i, false) }
// and where changing the selection of child
private fun changeSelection(isChecked: Boolean, groupPosition: Int) {
if (isMyGroupExpanded.get(groupPosition, false)) {
/* change only if the group is expanded */
}
}
因此,合拢组的子级不受影响,但是在组扩展时需要更改它们,为此,请在Adapter
中添加一些代码行:
private val isGroupChecked = SparseBooleanArray()
// inside override fun getGroupView(...
MyCheckBoxView.setOnCheckedChangeListener { _, isChecked ->
onCheckedChangeListener(isChecked, groupPosition)
isGroupChecked.put(groupPosition, isChecked)
}
// inside override fun getChildView(...
if (isGroupChecked.contains(groupPosition)) {
myView.visibility = if (isGroupChecked.get(groupPosition)) View.VISIBLE else View.INVISIBLE
}