【问题标题】:ExpandableListAdapter with CheckedTextView - complex selection logic带有 CheckedTextView 的 ExpandableListAdapter - 复杂的选择逻辑
【发布时间】:2014-07-13 14:53:49
【问题描述】:

我有一个 ExpandableListAdapter 可以动态加载组和组的子项。我希望能够创建复杂的逻辑来检查子项。一些子项目将是多项选择,一些将是单选。当您选择一个单选项目时,所有多项选择项目都未选中。我对多项选择项没有问题,但是在选中单项选择项时我无法取消选择这些项。欢迎任何建议。

我不包含源代码,因为它非常标准,但可以根据要求提供。

【问题讨论】:

  • 如何取消选择“多项”?您可能需要重新获取可见视图,以便更改可见。
  • 我无法取消选择多个项目。如何重新获取可见视图?

标签: android android-activity android-listview android-checkbox


【解决方案1】:

要标记哪些项目是多个哪些不是,我会在适配器内创建一些布尔方法。如果需要在布尔数组的帮助下,将每个多个项目的值保存在里面。

在您的 getChildView() 中,您可以简单地执行类似的操作

if (multiples.get(groupView).get(childView))
    myView.setChecked(false);

要刷新您可能需要在适配器上调用 notifyDataSetChanged() 的可见项目。

【讨论】:

  • 完美运行,谢谢。不敢相信我在这上面花了这么多时间。
  • 唯一的问题是屏幕旋转后复选框不会保留。我该如何解决?
  • 创建一个单独的数组来保存所有复选框的选中状态并使该数组静态。或者使用 onSaveInstanceState 来保存保存了哪些复选框,并且在 onCreate ifsavedInstanceState 不为空,获取复选框的状态并使用它们。
【解决方案2】:

您使用的是onCheckChangeListener 吗?如果是这样,您可能会遇到几个问题。

首先,如果您的多项选择项在您单击它们时没有被取消选中,那是因为您在使用onCheckChanged 调用isChecked = false 时没有显式调用setChecked(false)

如果您希望在选择单选项目时取消选择多项选择项目,您还必须在单选项目侦听器的 onCheckChanged 方法中为所有多选项目显式调用 mMultiChoiceItem.setChecked(false)

【讨论】:

  • 我的问题是我不知道如何获取 mMultipleChoiceItems 列表,以便我可以对它们调用 setChecked。我已经尝试在适配器和内部活动中这样做,但没有运气。理想的方法是为给定的组和子索引返回 mMultipleChoiceItem 的函数。
  • 您必须使用资源 ID。理想情况下,您的所有列表元素视图都应包含指向多选项目的相同 id。因此,要访问该视图,请尝试mListAdapter.getView(index, null, mListView).findViewById(R.id.multi_choice_item) 之类的操作,它将返回对作为View 的多选项目的引用。如有必要,您可以遍历列表适配器以获取所有这些视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 2017-05-13
  • 2015-01-25
  • 1970-01-01
  • 2021-02-28
  • 2011-03-24
  • 1970-01-01
相关资源
最近更新 更多