android - ExpandableListView - 将选定的子项保持在 "pressed"状态

标签 android android-widget

我在平板电脑屏幕的左侧导航中使用 ExpandableListView。

当用户按下可展开列表中某个组的子项时,我希望让子项保持按下状态,以便用户知道正在为哪个子项显示右手内容。

对于 ListView,我可以通过代码中的这一行来实现这个效果:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

然后应用这个选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@drawable/menu_item_pressed" />
<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/menu_item_normal" />
<item android:state_pressed="true" android:drawable="@drawable/menu_item_pressed" />
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/menu_item_pressed" />

listView 项被按下后,listView 项上的“state_activiated”为真。

我希望同样的技术适用于我的 expandableListView,但它没有。我用过:

getExpandableListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

然后使用上面相同的选择器,但它不起作用。我还尝试了其他状态,例如 state_selected 和 state_checked,但它们也不起作用。

上面的选择器正确地应用了按下和未按下状态。然而,看起来使用 ExpandableListView,按下 child 后状态不会“激活”。

感谢任何帮助。谢谢!

最佳答案

在 ExpandableListView 上执行以下操作:

步骤 1. 将选择模式设置为单一(可以在 xml 中作为 android:choiceMode = "singleChoice" 完成)

第 2 步。 使用选择器 xml 作为背景 (android:listSelector = "@drawable/selector_list_item")

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
   android:exitFadeDuration="@android:integer/config_mediumAnimTime">

   <item android:drawable="@android:color/holo_blue_bright" android:state_pressed="true"/>
   <item android:drawable="@android:color/holo_blue_light" android:state_selected="true"/>
   <item android:drawable="@android:color/holo_blue_dark" android:state_activated="true"/>

</selector>

第 3 步。 在 onChildClick() 回调中调用 expandableListView.setItemChecked(index,true)

index是从0开始计算的子item的索引

第 1 组 [索引 = 0]

  • 子项 1
  • 子项目 2
  • 子项 3 [索引 = 3]

第 2 组 [索引 = 4]

  • 子项 1
  • 子项目 2
  • 子项目 3 [索引 = 7]

第 3 组 [索引 = 8]

  • 子项 1
  • 子项目 2
  • 子项 3 [索引 = 11]

如果我们也有列表标题,它们也将说明索引值。

这是一个工作示例:

@Override
public boolean onChildClick(ExpandableListView parent, View v,
        int groupPosition, int childPosition, long id) {
    ...

    int index = parent.getFlatListPosition(ExpandableListView.getPackedPositionForChild(groupPosition, childPosition));
    parent.setItemChecked(index, true);


    return true;
}

关于android - ExpandableListView - 将选定的子项保持在 "pressed"状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315855/

相关文章:

android - 使用 Doclava 生成 android 项目 javadoc 时出错

android - 在 Parse.com 获取图像文件的链接

android - 通知消失 - Android DownloadManager

android - 让 Horizo​​ntalScrollView 的 child 和屏幕一样大?

android - 如何在小部件中循环文本?

android - ImageView 方法 `setImageState(int[] state, boolean merge)` 有什么作用?

android - 使用 Xamarin 调试 "remote"Android 设备?

Android:在 ExpandableListView 中隐藏子分隔符

Android:在每个 ListView 行中添加两个 GridView

android - 如何在 map 图钉图像上设置索引号