我有一个选择按钮,单击一个按钮时会弹出。
下图显示了外观。

java - listView setItemChecked不起作用-LMLPHP

这是问题所在。当我单击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不能执行它的工作。

请让我知道是否要我上传更多代码或屏幕截图。

最佳答案

我希望以下代码能解决问题,

        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);
        }
    }

关于java - listView setItemChecked不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42638839/

10-10 04:08