Android:如何重写AlertDialog中的onBackPressed()?

我有一个AlertDialog dlgDetails显示从另一个AlertDialog dlgMenu 。 我希望能够再次显示dlgMenu,如果用户按下dlgDetails中的后退button,并且只要按下对话框外的对话框即可退出对话框。

我认为这样做的最好方法是重写onBackPressed为dlgDetails,但我不知道如何做,因为AlertDialogs必须使用Builder间接创build。

我试图创build一个派生AlertDialog( public class AlertDialogDetails extends AlertDialog { ...} ),但我想我还必须在该类AlertDialog.Builder扩展AlertDialog.Builder返回AlertDialogDetails,但没有一个更简单的方法吗? 如果不是的话,你会如何凌驾build筑师?

Solutions Collecting From Web of "Android:如何重写AlertDialog中的onBackPressed()?"

我最后添加了一个关键的监听器到我的对话框来听Back键。 没有优先重写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 ...) 

find一个更短的解决scheme:)尝试这个

  accountDialog = builder.create(); accountDialog.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { dialog.dismiss(); activity.finish(); } }); 

这处理BACKbutton和单击对话框外部:

 yourBuilder.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { dialog.cancel(); // do your stuff... } }); 

dialog.cancel()是关键:使用dialog.dismiss()这将只处理在对话框外的点击,如上面的回答。

我在java类中创build了一个新的函数,并使用dialog Builder的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 } }