我在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块中)都会重复。正因为如此,你放松了你对物体的状态。
希望得到帮助。