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/

相关文章:

android - 在布局中添加 ExpandableListView

android - 4.4 Kit Kat 上的透明状态栏/系统用户界面

java - 如何在 Swing 中获取 JFrame

java - 如何使用 LayeredHighlighter - 一个高亮显示在另一个之上

java - 服务层API设计

android - 从单元测试中的 list 中获取元数据

jQuery Mobile 范围 slider 响应不够

android - 单击图标 ExpandableListView

安卓。 ExpandableListAdapter 和 Sqlite

javascript - Oracle 的 deployjava.js 在 Firefox/Chrome 中不再起作用。我还可以做些什么?