3

我在 Expandable ListView 中显示来自 SQLite 数据库的条目,一切正常,但是,我想在所有子项旁边添加一个复选框。每次我选中一个复选框然后向下滚动或收缩我选中的复选框时,它都不会保存复选框的状态。我知道每当我向下滚动并展开组等时,该列表都会被回收。如何保存每个复选框的状态(每个孩子)?我有一个扩展 CursorTreeAdapter 的类,并且方法中没有“childPosition”。为了保存状态,我需要做什么?

4

2 回答 2

1

您可以拥有一个布尔标志数组,其大小与列表元素的总和相同,并从该数组中为任何组件设置和获取检查值。

于 2012-01-09T05:18:58.507 回答
0

另一种解决方案是您可以为列表视图中的每个元素保留一个计数器。例如,如果您有 Person 列表,您可以在您的 Person 类中添加一个计数器变量。

在 getChildView 方法中,将所有代码放在一个 if 块中,如下所示;

    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) {

    //FOR SAVE THE STATES!!
    if(parents.get(groupPosition).getCounter()==0) {
        DatePicker datePicker = null;
        Button ok = null;
        Spinner installment = null;
        CheckBox creditCard;
        ......//BLA BLA BLA


        //After finish your codes, increment the counter
        parents.get(groupPosition).setCounter((parents.get(groupPosition).getCounter()+1));
    }

    return convertView;
}

因为对于每个调用的 expandGroup 方法,所有的初始化(现在在 if 块中)都会重复。因此,您会失去对象的状态。

希望这有帮助。

于 2016-03-10T09:41:28.240 回答