java - SimpleExpandableListAdapter 和 expandedGroupLayout

标签 java android expandablelistadapter

我正在尝试使用 SimpleExpandableListAdapter,无论组是否展开,我都需要不同的布局。

有一个构造函数允许为组传递两个布局:

SimpleExpandableListAdapter(Context context,
 List<? extends Map<String, ?>> groupData,
 int expandedGroupLayout,
 int collapsedGroupLayout,
 String[] groupFrom,
 int[] groupTo,
 List<? extends List<? extends Map<String, ?>>> childData,
 int childLayout,
 String[] childFrom,
 int[] childTo)

我传递了两个不同的布局,但只显示了 collapsedGroupLayout。

任何人都可以使用它吗?

谢谢

最佳答案

看了SimpleExpandableListAdapter的源码,好像有bug:

public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
        ViewGroup parent) {
    View v;
    if (convertView == null) {
        v = newGroupView(isExpanded, parent);
    } else {
        v = convertView;
    }
    bindView(v, mGroupData.get(groupPosition), mGroupFrom, mGroupTo);
    return v;
}

我们可以看到,如果 convertView 不为 null,则如果 ListView 重用其单元格,则永远不会使用“isExpanded”参数。因此,如果单元格可见并被点击,convertView 将按原样重用,而不会使用其他布局。

对我来说,一个快速的解决方案是每次覆盖 getGroupView 并为 convertView 传递 null:

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
            ViewGroup parent) {
        return super.getGroupView(groupPosition, isExpanded, null, parent);
    }

更好的解决方案是保留组位置及其状态的列表,如果状态发生变化则不重用 convertView。

关于java - SimpleExpandableListAdapter 和 expandedGroupLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19520037/

相关文章:

java - Guice:根据谁得到它注入(inject)不同的实现?

android - 无法为未附加到 FragmentManager 的 Fragment 设置MaxLifecycle : ViewPager

android - 在 CursorTreeAdapter 类的 getChildrenCursor() 方法中异步查询数据库的模式

Android 单击时更改图像,自定义可扩展列表适配器

android - NullPointerException 获取 StringArray 到 String[]

java - 如何通过 rpm-maven-plugin 使用运行时环境变量

java - 如何用空格拆分字符串并将任何内容单独留在引号内?

java - Lambda合并内部对象列表

android - 在 Android 中正确的纵横比

android - 如何使用 Firebase 实时数据库在不知道 Android 索引的情况下更新 ArrayList 中的元素?