【问题标题】:How to change view of expandable list view children when parent is collapsed in Android?当父母在Android中折叠时如何更改可扩展列表视图子项的视图?
【发布时间】:2019-11-09 23:01:46
【问题描述】:

我正在ExpandableListView 中实现选择模式。当我单击一个孩子时,选择会切换。我在每个父母中都有一个CheckBox,我想从中控制所有孩子的选择。

我的问题是,当父级折叠并单击其CheckBox 时,应用程序由于空指针异常而崩溃,因为当我尝试更改子级的选择时,我找不到子级并获得 null .但是当父级展开时一切正常。

那么,解决此类问题的好方法是什么?

【问题讨论】:

  • 不要尝试更改CheckBox 的选择。您的数据模型可以有一个名为 isSelected 的布尔字段。当您想选中/取消选中所有孩子时,只需更改所有孩子的布尔标志。然后,在你的onBindViewHolder 上,说checkBox.setChecked(item.isSelected())
  • 我想改变调用片段活动中的选择,而且我不认为ExpandableListView中是否有onBindViewHolder方法
  • 对不起。我误解了。我以为你在使用带有可扩展适配器的RecyclerView。我建议你使用一个库来处理你需要的所有东西。我以前亲自使用过这个,效果很好 - github.com/thoughtbot/…
  • @ᴛʜᴇᴘᴀᴛᴇʟ 我认为您链接的库在父级上没有复选框,虽然我已经在子级上实现了选择,但我认为我不需要这个库

标签: android kotlin android-expandable-list-view


【解决方案1】:

我通过添加一些代码行而不更改以前的代码来解决,所以这个答案可能对不想用不同方法重写代码的人有所帮助。

在调用FragmentActivity 中,设置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
}

【讨论】:

    猜你喜欢
    • 2011-03-06
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多