【问题标题】:How uncheck items in AlertDialog (setMultiChoiceItems)?如何取消选中 AlertDialog (setMultiChoiceItems) 中的项目?
【发布时间】:2019-03-06 17:44:51
【问题描述】:

我想在总共选择三个项目时清除所选项目,我正在执行以下操作但不工作......

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

【问题讨论】:

    标签: java android android-alertdialog


    【解决方案1】:

    question 中看到 Jorgesys 的答案,我意识到我的代码中缺少什么,也有必要更改布尔列表。

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

    【讨论】:

    • 谢谢!这让我发疯了!数组的解决方法就像一个魅力!
    • 浪费了一天时间才找到这个答案。
    • 很好的发现,我很难找到问题所在。请注意,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); 
    

    只会将列表中的一项设置为未选中。这将是您单击的第三个。因此,您单击的前两个将被选中并保持选中状态。然后,当您单击第三个时,它将被检查一秒钟,然后取消选中自身。那是你想要做的吗?还是要取消选中所有 3 个?您的问题不是很清楚您要做什么。

    【讨论】:

    • 您好蒂姆,感谢您的回复,我从索引号 1 开始,因为我忽略了第一项。是的,这就是我想要的(“当您单击第三个时,它将被检查一秒钟,然后取消选中。”)
    • 我的问题是关于命令,("((AlertDialog) dialog).getListView().setItemChecked(which, false); ") 它运行但没有任何反应。
    【解决方案3】:

    如果您想使用 multicheckoption 作为单选选项,请使用此代码。

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

    【讨论】:

      【解决方案4】:
      for (int i = 0; i < visitArray.length; ++i) {
                          _selections[i] = false;
                          ((AlertDialog) dialog).getListView().setItemChecked(i, false);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-13
        • 2023-04-06
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        • 2014-12-16
        相关资源
        最近更新 更多