2013-05-07 22 views
7

Tôi sử dụng showDialogdismissDialog trong hoạt động để hiển thị và hủy hộp thoại của mình. Có cách nào để đưa ra một lệnh bấm vào hộp thoại hiện đang được hiển thị mà không giữ một biến tham chiếu hộp thoại?Làm cách nào để nhấp vào 'OK' trên AlertDialog qua mã?

Ví dụ: tôi muốn nhấn nút 'Ok'/tích cực của hộp thoại thông qua mã.

+0

Bạn đang sử dụng trình tạo để thiết lập hộp thoại của mình phải không? – TronicZomB

+0

@TronicZomB: Có, tôi đang sử dụng 'Builder' và tôi ghi đè' onCreateDialog' trong 'Hoạt động' để thiết lập hộp thoại của tôi. – Arci

+1

Ok, bakriOnFire có một ví dụ khá tốt về những gì tôi thực sự sẽ đăng ngay trước khi tôi nhận thấy câu trả lời của anh ấy. Đó là khá nhiều những gì bạn sẽ muốn mô hình mã của bạn như thế nào. – TronicZomB

Trả lời

25

tôi đã không kiểm tra mã này, nhưng nó cũng làm việc:

AlertDialog dialog = ... 
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick(); 

Ngoài ra, nếu bạn không muốn giữ một tham chiếu đến hộp thoại nhưng kiểm soát thiết lập của nó, bạn có thể trích xuất mã nhấp chuột trên vào một phương thức khác:

AlertDialog.Builder builder = ... 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
    onPositiveButtonClicked(); 
    } 
}); 

và thực hiện onPositiveButtonClicked() trong Hoạt động của bạn. Thay vì lập trình nhấp vào nút OK, bạn có thể gọi onPositiveButtonClicked()dismissDialog(id). Nếu bạn cần xử lý nhiều hộp thoại, hãy có onPositiveButtonClicked tham số id.

+0

Cảm ơn, nhưng tôi đang sử dụng Builder và nó không có phương thức 'getButton'. Có cách nào để nhấp vào nút 'OK' mà không giữ tham chiếu đến hộp thoại thực tế không? – Arci

+2

Nếu bạn có thể giữ một tham chiếu đến hộp thoại, cá thể AlertDialog được trả về bởi AlertDialog.Builder # show(). Nếu không, có thể di chuyển logic nhấp chuột vào một phương thức riêng biệt không? Thay vì mô phỏng một nhấp chuột, bạn chỉ có thể thực thi mã nhấp chuột và loại bỏ hộp thoại. –

+0

Có, nó trả về một 'AlertDialog' nhưng tôi không muốn giữ một biến tham chiếu đến' AlertDialog'. Có cách nào để truy cập hộp thoại bằng cách sử dụng 'Hoạt động' cho rằng tôi có ID của hộp thoại không? – Arci

-1

Hãy thử điều này: -

AlertDialog.Builder alBuilder = new AlertDialog.Builder(this); 
     alBuilder 
       .setMessage("Do you wamt to exit?") 
       .setPositiveButton("Yes", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           dialog.cancel(); 
           // Write your code here for Yes 
          } 
         }) 
       .setNegativeButton("No", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           dialog.cancel(); 
           // Write your code here for No 
          } 
         }); 
     alBuilder.setCancelable(false); 
     alBuilder.show(); 
+0

Cảm ơn! Nhưng tôi nghĩ bạn hiểu lầm câu hỏi của tôi. – Arci

+0

u có thể đăng mã ur để chúng tôi có thể hiểu được u muốn .. – bakriOnFire

+0

Tôi đang tìm một cái gì đó như 'activity.getActiveDialog (DIALOG_ID) .getButton (...). PerformClick()'. Cũng giống như 'activity.dismissDialog (DIALOG_ID)' trong đó bạn có thể loại bỏ hộp thoại bằng cách chỉ sử dụng DIALOG_ID. – Arci

4

Tôi muốn nhấn nút tích cực 'Ok'/của hộp thoại thông qua mã

Vâng, bạn có thể làm điều đó bằng cách thể hiện của POSITIVE NÚT và sau đó gọi performClick() trên đó. hãy thử như sau:

Button okButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); 
okButton.performClick(); //<<< click Button using code 
+0

Cảm ơn! Nhưng nếu tôi không có tham chiếu đến biến '' thì sao? Có cách nào để truy cập vào nút 'TÍCH CỰC' bằng cách sử dụng 'Hoạt động' chỉ (tương tự như' dismissDialog')? – Arci