【问题标题】:Prevent AlertDialog from auto closing on NeutralButton Click???防止 AlertDialog 在 NeutralButton Click 上自动关闭???
【发布时间】:2016-08-23 07:29:28
【问题描述】:

有没有办法在单击中性按钮或否定按钮时覆盖警报对话框的行为以不自动关闭。

final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(false);
    builder.setTitle("Title");
    builder.setPositiveButton("Done", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // do something and close dialog
        }
    });
    builder.setNeutralButton("Clear All", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // do something but not close dialog           
        }
    });
    builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int which, boolean isChecked) {
            if(isChecked){
            // do something
            } else {
            // do something else
            }
        }
    });
    final AlertDialog dialog = builder.create();
    dialog.show();

此处否定按钮的预期行为是:单击“清除全部”时,它应该只清除全部选择,而不是自动关闭对话框。?但 Android alertDialog 会在点击 NegativeButtonNeutralButton 时自动关闭对话框。任何覆盖此行为的方法

【问题讨论】:

标签: java android android-alertdialog


【解决方案1】:

所以我能够通过在 dialog.create() 之后和 dialog.show() 之前添加 dialog.setOnShowListener() 来实现这一点

    builder.setNeutralButton("Clear All", null);
    builder.setOnShowListener(new DialogInterface.OnShowListener() {

        @Override
        public void onShow(DialogInterface dialog) {

            Button clearAll = builder.getButton(AlertDialog.BUTTON_NEUTRAL);
            clearAll.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // do something but don't dismiss
                       for(int which=0; which<checkedItems.length; which++){
                        ((AlertDialog) dialog).getListView().setItemChecked(which, false);
                    }
                }
            });
        }
    });

循环解决了一个问题,问题:单击全部清除时,警报对话框中的复选框 UI 不会改变。因此,运行最后一个循环来更改 UI,取消选中所有复选框。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 2011-08-29
相关资源
最近更新 更多