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