Closed lixplor closed 7 years ago
原因: 虽然设置了对象setchecked=true, 但是这些对象没有在集合中更新, 集合中的对象还是原有对象, 所以notify实际起作用, 但是数据没有变, 所以看不出来
如果可以, 用Activity对象的recreate()方法重新创建Activity进行显示, 这样也可以更新
/*
原不能更新的代码
*/
public void all(View v) {
// 设置用户进程中的checkbox的值全为true
for (TaskInfo taskinfo : userAppInfos) {
taskinfo.setChecked(true);
}
// 设置系统进程中的checkbox的值全为true
for (TaskInfo taskinfo : systemAppInfos) {
taskinfo.setChecked(true);
}
// 更新界面
myAdapter.notifyDataSetChanged();
}
/*
修改后的代码
*/
public void selectAll(View v){
//清空临时集合
tempList.clear();
//根据分组设置bean状态
for(MyProcess process : userProcesses){
process.setChecked(true);
//重新添加到临时集合中
tempList.add(process);
}
//从临时集合复制回原集合
userProcesses.clear();
userProcesses.addAll(tempList);
tempList.clear();
for(MyProcess process : sysProcesses){
process.setChecked(true);
//重新添加到临时集合中
tempList.add(process);
}
//从临时集合复制回原集合
sysProcesses.clear();
sysProcesses.addAll(tempList);
tempList.clear();
//更新界面
myAdapter.notifyDataSetChanged();
}
ExpandableListView更新Child列表, notifyDataSetChanged()不管用 发生的情况是全选条目的checkbox, 不能更新界面