如何在可扩展列表视图中保存复选框的状态-Android

如何在可扩展列表视图中保存复选框的状态-Android,android,checkbox,expandablelistview,savestate,Android,Checkbox,Expandablelistview,Savestate,我在Expandable ListView中显示来自SQLite数据库的条目,一切正常,但我想在所有子项旁边添加一个复选框。每次我选中一个复选框,然后向下滚动或收缩我选中的复选框时,它不会保存复选框的状态。我知道,每当我向下滚动并展开组等时,列表就会被回收。如何保存每个复选框的状态(每个子项)?我有一个扩展CursorTreeAdapter的类,并且在方法中没有“childPosition”。要保存状态,我需要做什么?您可以拥有一个与列表元素总和大小相同的布尔标志数组,并从该数组中为任何组件设置

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

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

另一个解决方案是,您可以在列表视图中为每个元素保留一个计数器。例如,如果您有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块中)都会重复。正因为如此,你失去了对象的状态


希望对您有所帮助。

谢谢您的回复。如果我向后滚动,我将使用哪种方法调用此数组来设置复选框以选中?另外,你能提供一些示例代码吗?你需要在getChildView方法中使用这个数组,每当你向后滚动或设置适配器时,它都会被调用,我现在没有任何示例,但是你可以搜索并按照链接自定义可扩展列表视图,你会得到足够的帮助。