2011-06-01 62 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 ...)