如何取消选中 AlertDialog 中的项目(setMultiChoiceItems)?

2022-09-03 08:41:26

我想清除选定的项目,当总数达到三个选定的项目时,我正在做如下,但不起作用...

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getResources().getText(R.string.escolhaArquivosBaixados));
builder.setMultiChoiceItems(items, selected, new DialogInterface.OnMultiChoiceClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        //                  
        int count = 0;
        for(int i = 1; i < selected.length; i++){
            //
            if (selected[i]){
                count++;
            }
            if (count == 3){
                //enter here but nothing happens
                ((AlertDialog) dialog).getListView().setItemChecked(which, false);
                break;
            }
        }
    }
});

答案 1

看到Jorgesys在这个问题中的答案,我意识到我的代码中缺少什么,这也是改变布尔列表所必需的。

        selected[which] = false;
        ((AlertDialog) dialog).getListView().setItemChecked(which, false);

答案 2

数组中的第一个索引是 0,而不是 1。所以这个:

for(int i = 1; i < selected.length; i++){
                //
                if (selected[i]){
                    count++;
                }

永远不会检查布尔数组中的第一项。您需要从 i == 0 开始。我不知道您的列表中有多少个项目。但是,如果您只有3个项目,那么

if (count == 3){

永远不会是真的,因为它只会检查数组中的最后两个。还有这个电话:

((AlertDialog) dialog).getListView().setItemChecked(which, false); 

只会将列表中的 1 个项目设置为未选中。这将是您单击的第三个。因此,您单击的前两个将被检查并保持检查状态。然后,当您单击第三个时,它将在一瞬间进行检查,然后取消选中自己。这就是你想做的吗?或者您想取消选中所有3个?它不是很清楚你的问题你想做什么。


推荐