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

时间:2011-02-21 15:15:21

标签: java android alertdialog

当我选择了三个项目时,我想清除所选项目,我正在做如下但是没有工作......

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

4 个答案:

答案 0 :(得分:43)

question中看到Jorgesys的回答我意识到我的代码中缺少的东西,也是更改布尔列表所必需的。

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

答案 1 :(得分:1)

数组中的第一个索引是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个。所以你点击的前两个将被检查并保持检查。然后,当您单击第三个时,它将被检查一瞬间,然后取消选中它自己。那是你想要做的吗?或者你想取消选中所有3个?你的问题不是很清楚你想要做什么。

答案 2 :(得分:0)

如果您想将多核选项用作单一选项,请使用此代码。

 String[] items = new String[]{"Most Funded (high - low)", "Most Funded (low - high)", "Newest first", "Funding Ask"};
boolean selected[] = new boolean[]{false, false, false, true};

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

        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            //
            for (int i = 0; i < selected.length; i++) {
                if (i == which) {
                    selected[i]=true;
                    ((AlertDialog) dialog).getListView().setItemChecked(i, true);
                }
                else {
                    selected[i]=false;
                    ((AlertDialog) dialog).getListView().setItemChecked(i, false);
                }
            }
        }

    });
    builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.dismiss();
        }
    });
    builder.show();
}

答案 3 :(得分:0)

for (int i = 0; i < visitArray.length; ++i) {
                    _selections[i] = false;
                    ((AlertDialog) dialog).getListView().setItemChecked(i, false);
}