2012-09-24 26 views
8

Ứng dụng Android của tôi hiển thị AlertDialog khi nhấp vào nút. Khi tôi bấm vào nút nhiều hơn một lần một hộp thoại được tạo ra. Làm thế nào tôi có thể sửa lỗi này?Làm cách nào để chỉ hiển thị một Hộp thoại cùng một lúc?

Đây là mã của tôi:

button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     dialog = new AlertDialog.Builder(context);    
     dialog.show(); 
    } 
}); 
+2

Hiển thị mã của bạn ... – RvdK

+0

Thay vì AlertDialog.Builder, tôi đang sử dụng lớp tùy chỉnh mở rộng AlertDialog. hiển thị nút image.No. –

+1

Đoán bạn vẫn có thể sử dụng cùng một khái niệm. Chỉ cần tạo một loại cờ :) – Araw

Trả lời

4

Bạn có thể tạo cờ toàn cầu (boolean) được đặt thành true nếu hộp thoại được hiển thị? Nếu người dùng nhấp vào ok, có, không hoặc bất cứ điều gì hộp thoại được đóng lại và bạn đặt cờ thành sai.

Vì vậy, một cái gì đó như:

boolean dialogShown; 

If(dialogShown) 
{ 
    return; 
} 
else 
{ 
    dialogShown = true; 
    dialog = new AlertDialog.Builder(context);    
    dialog.show(); 
} 
+1

luôn đặt các khối trong dấu ngoặc, thậm chí một lớp lót. Bạn tiết kiệm cho mình rất nhiều rắc rối (đặc biệt là khi sử dụng ngôn ngữ với tiền xử lý và macro) –

0

Đối với mỗi push vào nút bạn gọi phương thức. Vì vậy, đây là lý do tại sao nó được hiển thị nhiều lần.

Cách đơn giản nhất là chỉ cần xác định một biến Ví dụ trong lớp học của bạn mã của bạn như:

boolean alertIsBeingShown = NO; 

Sau đó đặt nó vào đúng khi cảnh báo đang được hiển thị như thế này

button.setOnClickListener(new OnClickListener() { 
      @Override 
     public void onClick(View v) { 
       if (alertIsBeeingShown) return; 
       alertIsBeingShown = YES; 
       dialog = new AlertDialog.Builder(context);    
       dialog.show(); 

    } 
}); 

và đặt biến thành false trong mã nơi bạn nhấn OK để biến nó biến mất.

+0

Tại sao bạn sử dụng YES và NO? –

+1

quá nhiều mục tiêu-c Tôi đoán –

0

Tạo một nút dương hoặc âm cho nó và chỉ gọi nó là OK và sử dụng nó để loại bỏ. Một cái gì đó như:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setMessage("Look at this dialog!") 
     .setCancelable(false) 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       //do things 
      } 
     }); 
AlertDialog alert = builder.create(); 
alert.show(); 
-1

Tạo hộp thoại trong một try-catch-block như thế này:

try { 
     dialog.setVisible(true); 
    } catch (NullPointerException e) { 
     dialog = new AlertDialog.Builder(context);    
     dialog.show(); 
    } 

Lần đầu tiên bạn thực hiện điều này, các NullPointerException được ném và hộp thoại là tạo. Những lần sau không có gì hiển thị sẽ thực sự xảy ra.

16

bạn cần phải kiểm tra xem isShowing thoại hay không

Dialog có một phương pháp isShowing() mà nên trả lại nếu hộp thoại hiện nhìn thấy được.

public AlertDialog myDialog; 

public void showDialog(Context context) { 
    if(myDialog != null && myDialog.isShowing()) return; 

    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle("Title"); 
    builder.setMessage("Message"); 
    builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int arg1) { 
       dialog.dismiss(); 
      }}); 
    builder.setCancelable(false); 
    myDialog = builder.create(); 
    myDialog.show(); 
    } 
+0

Tuyệt vời. xứng đáng hơn 1 upvote :) – Prabs

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