0

我有一个 BaseExpandableListAdapter 类,而 getChildView() 必须只返回几行。但是,当然,返回 null 会使应用程序崩溃,并且将可见性设置为 GONE 会在列表中创建一个空白区域。

因此,用户在每一行中都有一个复选框,并且当他下次打开列表时选中一个复选框时,它不会出现(就像从 ArrayAdapter 中删除,但我不能这样做)。

有什么好的选择吗?

编辑

@Override
public int getChildrenCount(int groupPosition) {
    int childrenCount = categories.get(groupPosition).size();
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);

    /** If the user wants to remove the completed items */
    if (settings.getBoolean("deleteCompletedItemsPref", false) == true) {
        for (int childPosition=0; childPosition<childrenCount; childPosition++) {
            if (categories.get(groupPosition).getItem(childPosition).isChecked()) {
                parent.removeViewAt(childPosition);
            }
        }
    }

    return childrenCount;
}

在这里,我运行该组的孩子并尝试删除不需要的视图,尽管我无法在此处删除视图,因为它是一个 AdapterView。

4

1 回答 1

0

BaseExpandableListAdapter一定已经实现了一个getChildrenCount()方法。您可以让它返回您的类别列表的大小(或者可能是列表的副本)。

public int getChildrenCount(int groupPosition) {
        return categories.get(groupPosition).size();
    }

如果选中,则只需删除子位置(最好在点击侦听器中)。当然,您还需要相应地调整数据集。如果不是,则可能将其设为数组列表,然后删除其中的相同位置。

于 2012-12-06T23:19:27.577 回答