0
我有一个多选对话框,当点击一个按钮时弹出。 下图显示了它的外观。listView setItemChecked not working
这是问题所在。当我点击select all
时,我以编程方式检查使用listView.setItemChecked(position, true)
的所有项目。那部分工作。但之后,当用户取消选中列表中的特定项目时,我想取消选中select all
。
下面是mycode,我不知道它为什么不起作用。
private CharSequence[] itemList = {"select all", "one", "two", "three", "four", "five", "six"};
private boolean[] itemBooleanList = new boolean[]{false, false, false, false, false, false, false};
final AlertDialog.Builder myDialog = new AlertDialog.Builder(this);
myDialog.setTitle("Select type(s)");
myDialog.setMultiChoiceItems(itemList, itemBooleanList, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) {
final ListView listView = ((AlertDialog)dialog).getListView();
if(indexSelected == 0){ // if "select all" is clicked - check/uncheck all items
for(int i=0; i<itemList.length; i++){
listView.setItemChecked(i, isChecked);
itemBooleanList[i] = isChecked;
}
}else{
itemBooleanList[indexSelected] = isChecked;
}
// now I check if all item in boolean[] are true or false, if one of the item is false, it returns false and `select all` can be unchecked
final boolean areAllTrue = areBooleanAllTrue(itemBooleanList);
listView.setItemChecked(0, areAllTrue);
System.out.println(Arrays.toString(itemBooleanList));
}
}).show();
PS:当我打印itemBooleanList
,如果用户取消选中一个项目,我也看到,该索引的布尔值,得到了设置为false,这意味着,逻辑是正确的,它只是setItemChecked
是不这样做的工作。
请让我知道你是否希望我上传更多的代码或截图。
那完美!非常感谢!你能解释为什么这个工作和我以前的代码不起作用吗? –
你没有考虑当其他项目被点击时会发生什么情况。 – sadat