如何在expandable listview中保存复选框的状态 - Android

时间:2012-01-09 04:56:37

标签: android checkbox expandablelistview savestate

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

2 个答案:

答案 0 :(得分:1)

你可以有一个布尔标志数组,其大小与列表元素的总和大小相同,并且可以从这个数组中获取任何组件的选中值。

答案 1 :(得分: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块中)都会重复。因此,你失去了对象的状态。

希望得到这个帮助。