2011-08-12 22 views
53

Tôi muốn đặt nút hủy trong số ProgressDialog. Dưới đây là mã của tôi:Làm cách nào để đặt nút hủy trong Hộp thoại tiến trình?

myDialog = new ProgressDialog(BaseScreen.this); 
myDialog.setMessage("Loading..."); 
myDialog.setCancelable(false); 
myDialog.show(); 

Tôi muốn đặt nút có onClickListener trên ProgressDialog này. Tôi đã thử với mã này:

myDialog.setButton("Cancel", new OnClickListener() {   
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub   
     myDialog.dismiss(); 
    } 
}); 

Nhưng nó không hoạt động. Tôi cũng đã thử những người nghe tương tự khác, nhưng vẫn không thành công. Làm cách nào để giải quyết vấn đề này?

Trả lời

126

Phương thức setButton bạn đang sử dụng không còn được dùng nữa (mặc dù nó vẫn hoạt động). Ngoài ra, bạn có thể muốn thêm nút trước khi hiển thị hộp thoại. Hãy thử:

myDialog = new ProgressDialog(BaseScreen.this); 
myDialog.setMessage("Loading..."); 
myDialog.setCancelable(false); 
myDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     dialog.dismiss(); 
    } 
}); 
myDialog.show(); 
+6

FYI, 'dialog.dismiss()' là không cần thiết trong Trình nghe 'onClick' vì nó sẽ tự động loại bỏ hộp thoại. Trong thực tế, phương pháp này không cho phép bạn ngăn không cho hộp thoại bị loại bỏ. –

17

Đảm bảo bạn gọi myDialog.setButton trước khi gọi myDialog.show();
Ngoài ra bạn có thể sử dụng myDialog.setButton("Cancel", (DialogInterface.OnClickListener) null); nếu bạn chỉ cần để đóng hộp thoại trên nút bấm.

2

việc kiểm tra này

private void createCancelProgressDialog(String title, String message, String buttonText) 
{ 
    cancelDialog = new ProgressDialog(this); 
    cancelDialog.setTitle(title); 
    cancelDialog.setMessage(message); 
    cancelDialog.setButton(buttonText, new DialogInterface.OnClickListener() 
    { 
     public void onClick(DialogInterface dialog, int which) 
     { 
      // Use either finish() or return() to either close the activity or just the dialog 
      return; 
     } 
    }); 
    cancelDialog.show(); 
} 

sau đó chỉ cần sử dụng một phương pháp gọi đơn giản từ những nơi khác trong hoạt động của bạn

createCancelProgressDialog("Loading", "Please wait while activity is loading", "Cancel"); 
+0

Nó bị hủy trên 4.3 hoặc cao hơn –

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