2012-10-03 47 views
1

我有一個對話框顯示,我希望當按下後退按鈕要求用戶確認他想在取消生效之前取消對話框時。這裏是我的代碼:對話框上的返回按鈕取消對話框,即使我有一個聽衆

dialog.setOnCancelListener(new OnCancelListener(){ 

      @Override 
      public void onCancel(DialogInterface arg0) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(dialog.getContext()); 
       builder.setMessage("Are you sure you want to cancel?") 
         .setCancelable(false) 
         .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface diag, int id) { 
           diag.dismiss(); 
           dialog.dismiss(); 

          } 
         }) 
         .setNegativeButton("No", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface diag, int id) { 
           diag.cancel(); 
          } 
         }); 
       AlertDialog alert = builder.create(); 
       alert.show();    
      } 

     }); 
     dialog.show(); 

的問題是,當返回按鈕被擊中,然後我目前的對話被取消,顯示我的「確認消息」。我如何確保在用戶確認之前不會取消對話框?

回答

6

onCancel當對話框被取消時被調用,這就是爲什麼取消對話框後顯示確認消息的原因。相反,您應該使用setOnKeyListener作爲對話。

dialog.setOnKeyListener(new OnKeyListener() { 
    @Override 
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      Toast.makeText(Activity.this, "back pressed", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     return false; 
    } 
}); 
+0

好,但「返回true」必須在if塊中,否則它會消耗每個按鍵。 – WindRider

0

你可以定製你的基地對話框像這樣:

private void doCreateBaseDlg(){ 
    final Dialog dialog = new Dialog(this); 
    dialog.setContentView(R.layout.activity_dialog_on_dialog_cutomize); 
    dialog.setTitle("Title..."); 

    //this is the button in your customize layout 
    Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK); 
    dialogButton.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      doCreate1stDlg();//here display your second conform dialog 
     } 
    }); 

    dialog.show(); 
} 

我試過了,它工作正常。希望可以幫助你。

相關問題