2011-08-18 2 views
18

Tôi có một hộp thoại cảnh báo như thế này:Làm thế nào để Ngăn chặn một Alert Dialog Bắt Closed bởi Nút Quay lại

AlertDialog.Builder oyunaBaslaDialog = new AlertDialog.Builder(this); 
    oyunaBaslaDialog.setMessage("A Takımı"); 
    oyunaBaslaDialog.setNeutralButton("Başla!", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface arg0, int arg1) { 
        oyunOyna(); 
       } 
      }); 
    oyunaBaslaDialog.show(); 

thoại này được thể hiện trong phương pháp onCreate. Và tôi muốn nó được đóng lại bằng nút trên đó. Nhưng Hardware Back Button cũng có thể đóng hộp thoại này mà không có hành động của hộp thoại nào được thực hiện.

Tôi không muốn nút quay lại đóng hộp thoại này, tôi có thể làm gì?

Trả lời

10

Triển khai setOnKeyListener và bắt KeyEvent.KEYCODE_BACK. Nếu bạn trả về true trong phương thức này, hộp thoại sẽ không đóng.

+4

Bằng cách này bạn có thể thực sự làm những gì bạn muốn khi người dùng nhấn nút quay lại trên Hộp thoại. – CommonMan

+0

Đây là giải pháp hữu ích duy nhất cho tôi vì tôi muốn thêm một hành động vào nút quay lại. – Roel

58

Sử dụng Dialog.setCancelable():

Sets liệu hộp thoại này có thể hủy bỏ với phím BACK.

Trong mã của bạn này sẽ là:

oyunaBaslaDialog.setCancelable(false); 
+0

tuyệt vời cảm ơn bạn! – Batuhan

+1

Nhưng điều gì sẽ xảy ra nếu bạn chỉ muốn quyết định xem phím quay lại có đóng hộp thoại dựa trên các điều kiện nhất định không? – aggregate1166877

+8

Nếu hộp thoại của bạn nằm trong DialogFragment, bạn sẽ cần phải gọi setCancelable (false) cho DialogFragment nếu không Back sẽ đóng đoạn. Liên kết tới tài liệu: http://developer.android.com/reference/android/app/DialogFragment.html#setCancelable%28boolean%29 – Ognyan

0

có một phương pháp gọi là, bulder.setCancelable() .by mặc bộ hủy ngang này 'đúng' .override nó với,

bulder.setCancelable(false)