gpt4 book ai didi

java - ExpandableListView打开折叠问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:47 24 4
gpt4 key购买 nike

我正在使用自定义可扩展列表适配器。当用户点击它时,我会突出显示一个 child 。在用户打开/折叠组之前,这可以正常工作。假设用户触摸了 Group 2 Item 1。这会突出显示 Group 2 Item 1。然后用户打开 Group 1。现在 Group 3 Item 2 突出显示。我已经做了一些选择不同项目的测试,但我找不到突出显示的行将跳转到的模式。有时它在列表中,有时它在列表中。我无法弄清楚放入 Activity 的 onGroupExpandListeneronGroupCollapseListener 以重新突出显示正确 View 的逻辑。有什么想法吗?

编辑:我的 onChildClickListener 中的当前代码

if (groupPosition == 0){ 
switch(childPosition) {
case 0:
previouslySelectedView.setBackgroundResource(R.color.transparent);
currentlySelectedView.setBackgroundResource(R.color.blue);
break;

所有组/ child 的代码相同

最佳答案

ExpandableListView 中的项目选择是通过平面列表(绝对定位)进行的。因此,如果新打开的组在当前网络选择之前并且有更少的 child ,那么选择将向上移动,反之亦然。我建议将选择模式设置为无并实现 onclick/expand 逻辑来处理你自己的焦点 - 例如,为 View 实现标签,并通过标签设置当前突出显示的项目。

这里有几点建议:

  1. 在 ExpandableListView.OnChildClickListener 中,您首先执行 ExpandableListView.findViewWithTag(theTag) 以检查具有此类标签的 View 并取消标记它们(也设置标签(null))并恢复背景。然后为该项目单击 setTag(theTag) 并将背景更改为选中。当然你可以有一些其他的逻辑并标记多个项目。请注意,一旦 View 被销毁,您将失去选择(例如在展开期间)。
  2. 拥有一些自定义 map 或将包含 View 的唯一 ID 和(未)标记状态的东西。这是允许跨滚动和展开保持持久选择的最佳解决方案。
  3. 在后备适配器中引入一个“标记”状态。因此,即使在应用程序启动/停止之间,标记也会持久存在。不过,这不是一个好方法,因为选择更像是一种 UI 行为。

我目前正在使用列表的选择模式倍数进行 ExpandableListView 选择。但是,正如我所说,因为选择是按位置进行的,所以我不得不在功能方面做出牺牲——也就是说,每当进行操作时,我都会清除选择。之前的实现是使用自定义 Map 来保存选定的 ID,老实说,这是更好的方法。

这就是我获取选定 ID 的方式(记住我使用的是多个选择模式):

final SparseBooleanArray checkedPositions = expList.getCheckedItemPositions();
final ExpandableListAdapter adapter = expList.getExpandableListAdapter();
List<Long> checkedIds = new ArrayList<Long>();
if (packedPositionType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
for (int i = checkedPositions.size() - 1; i >= 0; i--) {
if (checkedPositions.valueAt(i)) {
checkedIds.add(adapter.getGroupId(checkedPositions.keyAt(i)));
}
}
}

不过,在您的情况下,您需要检查 CHILD 填充位置。另请注意,我的适配器具有稳定(唯一)的 ID。如果您没有稳定的 ID,那么您可以依赖 ExpandableListView 的 getPackedPositionForChild() 方法并存储标记的打包位置。

关于java - ExpandableListView打开折叠问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6143499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com