2013-06-06 31 views
12

Tôi nhận được NoSuchMethodException khi sử dụng setOnDismissListener trên Dialog trong Android trên thiết bị có 4.1.2.Tại sao Android NoSuchMethodException xảy ra tại AlertDialog.Builder setOnDismissListener

Mã giống nhau đang hoạt động trên trình giả lập với phiên bản 4.2.2.

new AlertDialog.Builder(this) 
    .setTitle(R.string.select_province) 
    .setOnDismissListener(new OnDismissListener() { 
     public void onDismiss(DialogInterface arg0) { 
     //== other stuff 
    } 
}).show(); 

Bất kỳ ý tưởng nào?

Trả lời

27

Một cách giải quyết cho vấn đề này là chỉ cần đầu tiên tạo ra hộp thoại như thế này:

AlertDialog dialog = new AlertDialog.Builder(this).setTitle(R.string.select_province).create(); 

và sau đó đặt người nghe trực tiếp vào hộp thoại:

dialog.setOnDismissListener(new OnDismissListener() { 
    public void onDismiss(DialogInterface arg0) { 
    //== other stuff 
}); 

sau đó nếu bạn cũng muốn hiển thị:

dialog.show(); 

kết quả giống nhau và tất cả các phương pháp này được hỗ trợ từ API 1.

AlertDialog. setOnDismissListener (DialogInterface.OnDismissListener listener)

AlerDialog.Builder. create()

1

Đối với bất kỳ ai đang tìm kiếm câu trả lời này trong khi sử dụng DialogFragment, phương pháp của Mario sẽ dẫn đến một IllegalStateException. Trong trường hợp này, Thay vì sử dụng setOnDismissListener như được đề xuất, người ta nên ghi đè lên phương thức onDismiss hiện có của Fragment.

Các vấn đề liên quan