Android: как переопределить onBackPressed() в AlertDialog?
у меня есть AlertDialog dlgDetails
который показан из другого AlertDialog dlgMenu
. Я хотел бы снова показать dlgMenu, если пользователь нажимает кнопку "Назад" в dlgDetails и просто выходит из диалога, если он нажимает вне диалога.
Я думаю, что лучший способ сделать это, чтобы переопределить onBackPressed
для dlgDetails, но я не уверен, как это сделать, так как AlertDialogs должны быть созданы косвенно с помощью Builder.
Я пытаюсь создать производный AlertDialog (public class AlertDialogDetails extends AlertDialog { ...}
) но потом я думаю, я также должен продлить AlertDialog.Builder
в этом классе, чтобы вернуть AlertDialogDetails, но нет ли более простого способа? А если нет, то как вы собираетесь обойти строителя?
4 ответов
Я, наконец, добавил ключевой прослушиватель в свой диалог, чтобы прослушать заднюю клавишу.
Не так элегантно, как переопределение onBackPressed()
но это работает.
Вот код:
dlgDetails = new AlertDialog.Builder(this)
.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey (DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK &&
event.getAction() == KeyEvent.ACTION_UP &&
!event.isCanceled()) {
dialog.cancel();
showDialog(DIALOG_MENU);
return true;
}
return false;
}
})
//(Rest of the .stuff ...)
найдено более короткое решение:) попробуйте следующее:
accountDialog = builder.create();
accountDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
dialog.dismiss();
activity.finish();
}
});
Это обрабатывает как кнопку "назад", так и щелчок вне диалогового окна:
yourBuilder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
dialog.cancel();
// do your stuff...
}
});
dialog.cancel()
ключ: с dialog.dismiss()
это будет обрабатывать только щелчок вне диалогового окна,как указано выше.
Я создал новую функцию в классе java и сделал вызов этой функции из метода onClick построителя диалоговых окон.
public class Filename extends Activity(){
@Override
onCreate(){
//your stuff
//some button click launches Alertdialog
}
public void myCustomDialog(){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
//other details for builder
alertDialogBuilder.setNegativeButton("BACK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialod.dismiss;
myCustomBack();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.setCanceledOnTouchOutside(true);
alertDialog.show();
}
public void myCustomBack(){
if(condition1){
super.onBackPressed();
}
if(condition 2){
//do stuff here
}
}
@Override
public void onBackPressed(){
//handle case here
if (condition A)
//Do this
else
//Do that
}
}