2010-12-02 25 views
31

Tôi đang phát triển một bài kiểm tra và tôi cần người dùng trả lời tất cả các câu hỏi trước khi tiếp tục. Khi người dùng không trả lời tất cả các câu hỏi tôi hiển thị một cảnh báo đơn giản thông báo cho họ. Vấn đề là bất cứ điều gì tôi làm tôi không thể nhận được alertdialog để đóng. Tại sao không được dialog.cancel làm việc `Đây là các mã:Làm cách nào để đóng một cảnh báo Android

AlertDialog.Builder ad = new AlertDialog.Builder(this); 
ad.setTitle("Unanswered Questions"); 
ad.setMessage("You have not answered all the questions."); 
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
    dialog.cancel(); 
} 
}); 
ad.show(); 
+1

Quấn mã của bạn vào các thẻ mã để câu hỏi có thể đọc được. – jacknad

+1

đã cố loại bỏ()? – Vjy

+0

sẽ hoạt động. Tôi khuyên bạn nên thử gỡ lỗi từng bước và xem liệu ad.show() có đang được gọi hay không. Oh và phương pháp onClick nữa. – achie

Trả lời

24

thử sử dụng

dialog.dismiss()

thay vì sử dụng

dialog.cancel()

+1

Xin chào Cảm ơn bạn đã trả lời. Tôi đã thử dialog.dismiss(), và điều đó cũng không hoạt động. Vì vậy, tôi đoán tôi sẽ phải thử đề nghị gỡ lỗi của mỗi bước mỗi khi có vẻ như mã của tôi là chính xác. – Engmex

+5

loại bỏ() không có sẵn cho một AlertDialog, chỉ cho các hộp thoại thông thường –

1

tôi sẽ cố gắng đưa một

Log.e("SOMETAG", "dialog button was clicked"); 

trước dòng dialog.dismiss() trong mã của bạn để xem liệu nó có thực sự đạt đến phần đó hay không.

8

đặt dòng này trong OnCreate()

Context mcontext=this;  

và họ sử dụng biến này trong đoạn mã sau

final AlertDialog.Builder alert = new AlertDialog.Builder(
           mcontext); 
         alert.setTitle(title); 
         alert.setMessage(description); 
         alert.setPositiveButton("Ok", 
           new DialogInterface.OnClickListener() { 

            @Override 
            public void onClick(DialogInterface dialog, 
              int which) { 
             dialog.cancel(); 
            } 
           }); 
         alert.show(); 

Hãy thử mã này .. Nó đang chạy thành công ..

7

Sử dụng setNegative nút, không có nút Tích cực bắt buộc! Tôi hứa bạn sẽ giành chiến thắng x

+1

Tại sao các downvote? –

0
final AlertDialog.Builder alert = new AlertDialog.Builder(mcontext); 
alert.setTitle(title); 
alert.setMessage(description); 
alert.setPositiveButton("Ok", 
new DialogInterface.OnClickListener() { 
    @Override         
    public void onClick(DialogInterface dialog,int which) { 
     cancelDialog(); //Implement method for canceling dialog 
     } 
    }); 
alert.show(); 
void cancelDialog() 
{ 
    //Now you can either use 
    dialog.cancel(); 
    //or dialog.dismiss(); 
} 
68

Các AlertDialog.Builder tự nó không chứa một phương pháp dismiss() hoặc cancel().

Đây là một lớp học tiện lợi giúp bạn tạo một Hộp thoại , mà DOES có quyền truy cập vào các phương pháp đó.

Dưới đây là một ví dụ:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

AlertDialog alert = builder.create(); 

alert.show(); 

sau đó bạn có thể gọi phương thức alert.cancel() trên alert (không phải là người xây dựng)

+0

làm thế nào bạn có thể sử dụng cảnh báo trên một người nghe nhấp chuột khi nó vẫn đang được xây dựng với các nhà xây dựng ... xin vui lòng giải thích –

+1

Java của tôi là một chút gỉ nhưng bạn phải tạo đối tượng AlertDialog đầu tiên và THEN gọi setButton (BUTTON_POSITIVE, " OK ", DialogInterface.OnClickListener listener) trên đối tượng AlertDialog. http://developer.android.com/reference/android/app/AlertDialog.html#setButton%28int,%20java.lang.CharSequence,%20android.content.DialogInterface.OnClickListener%29 – PowerAktar

+0

Mã trong câu trả lời ở trên chỉ đơn giản là làm việc. Phải là câu trả lời đúng – Sandeep

0

bạn chỉ có thể khởi động lại hoạt động nơi alertdialog của bạn xuất hiện hoặc hoạt động khác phụ thuộc vào phán đoán của bạn. nếu bạn muốn khởi động lại hoạt động sử dụng kết quả này (); startActivity (getIntent());

2
AlertDialog.Builder builder = new AlertDialog.Builder(this); 
AlertDialog alert = builder.create(); 
alert.show(); 

Đoạn mã trên công trình nhưng chắc chắn rằng bạn thực hiện alert một biến toàn cầu, do đó bạn có thể đạt được nó từ bên trong phương thức onClick.

+0

Không cần biến toàn cục để nhớ hộp thoại. Bạn lấy nó trở lại làm đối số đầu tiên trong phương thức onclick. – Bananeweizen

+0

Cần thiết, nếu bạn muốn loại bỏ nó ở đâu đó ELSE. ĐÂY LÀ QUYỀN PHẢI, đặc biệt với việc thực hiện AlertDialog.OnClickListener –

0
alertDialog.setPositiveButton("SAVE", 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         /*Write your code here */ 
         dialog.dismiss(); 
        } 
       }); 
     alertDialog.setNegativeButton("CANCEL", 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 

        } 
       }); 
+0

Chào mừng bạn đến với stackoverflow. Câu trả lời này có thể cần thêm một chút giải thích cho các lập trình viên đồng nghiệp để hiểu nó hoạt động như thế nào. – Daenarys

5
AlertDialog.Builder ad = new AlertDialog.Builder(this); 
ad.setTitle("Unanswered Questions"); 
ad.setMessage("You have not answered all the questions."); 
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
    dialog.dismiss(); 
} 
}); 
ad.show(); 
1

Sử dụng Dialog thay vì AlertDialog

AlertDialog không có dismiss() nhưng AlertDialog có một số phương pháp để nút như setPositiveButton().

Tôi khuyên bạn nên sử dụng Hộp thoại nếu bạn muốn hộp thoại tùy chỉnh.

3

Trả lời bài đăng cũ nhưng hy vọng ai đó có thể thấy điều này hữu ích. Làm điều này thay vì

final AlertDialog builder = new AlertDialog.Builder(getActivity()).create(); 

Sau đó bạn có thể đi trước và làm,

builder.dismiss(); 
0

Tôi đã thử các giải pháp của PowerAktar, nhưng AlertDialog và Builder luôn giữ phần riêng biệt. Vậy làm thế nào để có được AlertDialog "đúng"?

tôi tìm thấy giải pháp của tôi trong show-Dialog: Bạn viết

ad.show(); 

để hiển thị hộp thoại. Trong phần trợ giúp của chương trình, nó nói "Tạo một AlertDialog với các đối số được cung cấp cho trình xây dựng này và hộp thoại Dialog.show()." Vì vậy, hộp thoại cuối cùng được tạo ra ở đây. Kết quả của show() - Command là chính AlertDialog. Vì vậy, bạn có thể sử dụng kết quả này:

AlertDialog adTrueDialog; 
adTrueDialog = ad.show(); 

Với điều này adTrueDialog nó có thể hủy bỏ() ...

adTrueDialog.cancel() 

hoặc để thực hiện một nút lệnh trong hộp thoại:

Button buttonPositive = adTrueDialog.getButton(Dialog.BUTTON_POSITIVE); 
buttonPositive.performClick(); 
-2

Nếu bạn đã sử dụng nút tích cực và tiêu cực (như tôi làm trong dự án của tôi), bạn có thể sử dụng nút Trung lập để đóng hộp thoại.

Tôi cũng nhận thấy rằng trong phiên bản Android> 5 hộp thoại được đóng bằng cách nhấp vào bên ngoài cửa sổ hộp thoại nhưng trong phiên bản cũ, điều này không xảy ra.

ad.setNeutralButton("CLOSE", new DialogInterface.OnClickListener(){ 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // close dialog 
    } 
}); 
+0

Sai, '.setCancelable (bool)' được sử dụng để xác định hành vi của việc nhấp vào bên ngoài cửa sổ. –

+0

@ M.Haché có gì sai khi nói rằng tôi nhận thấy một cái gì đó ?? Tôi đã không nói rằng đó là hành vi bắt buộc. Tôi vừa thử nghiệm trên hai thiết bị khác nhau với hệ điều hành khác nhau .... – nmirkov

+0

Không có gì sai khi chia sẻ điều bạn đã trải nghiệm. Tuy nhiên, những gì bạn đã viết là gây hiểu lầm và có thể đã được cải thiện với sự giúp đỡ của một tìm kiếm google nhanh chóng. –

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