android - ExpandableListView 扩展 View 未显示

标签 android android-layout android-listview expandablelistview android-drawable

我有一个 ExpandableListView,我想在项目展开时使用不同的 View 对其进行自定义。问题是我分配给 state_expanded 属性的图像从未显示过。我已经尝试了状态的几乎所有其他属性,但唯一可以执行任何操作的是 state_pressed,它只是在按下状态时短暂显示不同的图像。如何让我的 list_item_expanded 可绘制对象在项目展开时保持显示?任何想法或帮助将不胜感激。

这是我的选择器。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/list_item_expanded" android:state_expanded="true"></item>
  <item android:drawable="@drawable/list_item"></item>
</selector>

这是我设置 ExpandableListView 样式的地方

<style name="customExpandableList" parent="@android:style/Widget.ExpandableListView">
    <item name="android:groupIndicator">@null</item>
    <item name="android:dividerHeight">5dp</item>
    <item name="android:divider">@android:color/transparent</item>
    <item name="android:listSelector">@android:color/transparent</item>
    <item name="android:cacheColorHint">@android:color/transparent</item>
    <item name="android:childDivider">@android:color/transparent</item>
</style>

我将选择器设置为适配器中的可绘制对象,如下所示:

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View view, ViewGroup parent) {
    if (view == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.trans_sum_row, null);
    }
    view.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.list_item_selector));
}

最佳答案

似乎没有办法做我想做的事。 android:state_expanded 属性仅适用于组指示器,不适用于 ExpandableListView 本身。我最终做的是像这样为 ELV 创建一个选择器,为组指示器创建另一个选择器

<style name="customExpandableList" parent="@android:style/Widget.ExpandableListView">
  <item name="android:groupIndicator">@drawable/custom_group_selector</item>
  <item name="android:background">@drawable/custom_elv_selector</item>
  <item name="android:dividerHeight">5dp</item>
  <item name="android:divider">@android:color/transparent</item>
  <item name="android:listSelector">@android:color/transparent</item>
  <item name="android:cacheColorHint">@android:color/transparent</item>
  <item name="android:childDivider">@android:color/transparent</item>
</style>

之后,通过使用 SO 解决方案 here. 将组指示器定位在我想要的位置,我能够获得我想要的相同效果。

以这种方式定位组指示器对我来说并不是最佳解决方案,因为我在某些手机上看到了不同的结果,但这本身就是另一篇文章。

关于android - ExpandableListView 扩展 View 未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18708738/

相关文章:

Android - 动态分配和检索 ID

java - 使用自定义 BaseAdapter 的 ListView - 工作正常但不适用于添加的第一个项目

android:动画颜色从颜色到颜色变化

android - 如何使用 Android Studio 查看共享首选项文件?

android - 调用一个新的 onCreateInputView()

android - 更改可扩展 ListView 的图标

java - 找出ListView中的哪个item被刷了

带按钮的 Android ExpandableListView 父级

java - 如何在android中实现searchview过滤器?

android - "User is online"安卓 Material 设计的绿点图标