lixplor / android-Q-A

🐞 android related questions and answers
0 stars 0 forks source link

ExpandableListView更新Child列表, notifyDataSetChanged()不管用 #17

Closed lixplor closed 7 years ago

lixplor commented 7 years ago

ExpandableListView更新Child列表, notifyDataSetChanged()不管用 发生的情况是全选条目的checkbox, 不能更新界面

lixplor commented 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();
}