Предотвратить автоматическое закрытие 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);
}
}
});
}
});
Цикл решает одну проблему, Проблема: при нажатии очистить все, пользовательский интерфейс флажка в диалоговом окне предупреждения не изменяется. Так что запустите последний цикл, чтобы изменить пользовательский интерфейс, сделав все флажки снятыми.