2017-03-07 104 views
0

我有一个多选对话框,当点击一个按钮时弹出。 下图显示了它的外观。listView setItemChecked not working

enter image description here

这是问题所在。当我点击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是不这样做的工作。

请让我知道你是否希望我上传更多的代码或截图。

回答

1

我希望下面的代码就可以了,

 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; 
     if(!isChecked) { 
      itemBooleanList[0] = false; 
      listView.setItemChecked(0, false); 
     }else{ 
      //check whether all the items are checked otherthan 'select all' 
      //if true then 
      //itemBooleanList[0] = true; 
      //listView.setItemChecked(0, true); 
     } 
    } 
+0

那完美!非常感谢!你能解释为什么这个工作和我以前的代码不起作用吗? –

+1

你没有考虑当其他项目被点击时会发生什么情况。 – sadat