2011-06-01 65 views

回答

50

您可以使用setOnCancelListener

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() 
{ 
    @Override 
    public void onCancel(DialogInterface dialog) 
    { 
     MyActivity.this.finish(); 
    } 
}); 

您需要完成只有你的活动。对话框将被自动解除。

+2

+1指着我在正确的方向,我一直在寻找的效果是onDismissListener但足够接近:-) – Skizit 2011-06-01 17:16:04

+0

onDismissListener覆盖正面和负面的按钮了。所以如果你想重写压缩和点击对话外的任何地方,onCancelListener更好。 – thinzar00 2017-07-28 07:11:38

22
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { 
        @Override 
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
         if (keyCode == KeyEvent.KEYCODE_BACK) { 
           dialog.cancel(); 
           return true; 
          } 
         return false; 
        } 
       }) 
2
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState){ 
    return new Dialog(getActivity(), getTheme()){ 
    @Override 
    public void onBackPressed(){ 
     // dismiss(); 
     // activityReference.finish(); 
    } 
    }; 
} 
0
在我的情况

我使用DialogFragment,这仍然是一个对话框.. 所以我在对话框中重写onCancel(),它的反应就像活动的onBackPressed()每次我点击后退按钮时,对话框所示。

@Override 
public void onCancel(DialogInterface dialog) 
{ 
    super.onCancel(dialog); 
    Log.i("RecDialog.onCancel()", "onCancel"); 
} 

希望我帮了忙。

0

我最后在我的对话框中添加了一个按键监听器来收听后退键。 不如覆盖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 ...)