Предотвратить автоматическое закрытие AlertDialog при нажатии кнопки NeutralButton???

Есть ли способ переопределить поведение диалогового окна с предупреждением при нажатии нейтральной или отрицательной кнопки, чтобы не отключать автоматически.

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 автоматически закрывает диалоговое окно, по щелчку NegativeButton или NeutralButton. Любой способ переопределить это поведение

1 ответ

Таким образом, я смог добиться этого с добавлением dialog.setOnShowListener() после dialog.create() и до dialog.show()

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

Цикл решает одну проблему, Проблема: при нажатии очистить все, пользовательский интерфейс флажка в диалоговом окне предупреждения не изменяется. Так что запустите последний цикл, чтобы изменить пользовательский интерфейс, сделав все флажки снятыми.

Другие вопросы по тегам