2010-10-08 22 views

Trả lời

12

Tạo một đối tượng hộp thoại mới mở rộng ProgressDialog, sau đó ghi đè phương thức void public onBackPressed() trong đó.

+0

Không phải nút hủy, tôi đang nói về 'nút Quay lại' (một trong các nút vật lý) ở dưới cùng của điện thoại. – michael

+0

Bạn đã thử chưa? Nút quay lại sẽ kích hoạt sự kiện hủy. – AndrewKS

+0

Không. Nó không hoạt động. Tôi đặt một breakpoint trong onCancel(), nó không bao giờ được gọi. – michael

6

nếu bạn không có bất kỳ may mắn nào với phương thức onCancel(), bạn có thể viết phương thức onKeyDown() trong hoạt động của mình để kiểm tra xem hộp thoại tiến trình có đang hiển thị hay không hoặc nút quay lại được nhấn ... hay bạn có thể ghi đè lên phương thức onBackPressed() (một lần nữa, cho hoạt động) và kiểm tra xem hộp thoại của bạn có đang hiển thị hay không. Hoặc bạn có thể mở rộng lớp ProgressDialog và ghi đè lên trên BackPressed() trực tiếp từ đó ... trong trường hợp đó bạn sẽ không phải kiểm tra xem hộp thoại có đang hiển thị hay không.

ví dụ: cho phương pháp hoạt động:

public void onBackPressed() 
{ 
    if (progressDialog.isShowing()) 
    { 
     // DO SOMETHING 
    } 
} 

các onKeyDown() phương pháp sẽ tương tự, tuy nhiên bạn sẽ phải kiểm tra xem hộp thoại được hiển thị, cho dù nút được nhấn là nút 'trở lại', và bạn cũng nên làm một cuộc gọi đến super.onKeyDown() để đảm bảo phương thức mặc định cũng được thực hiện.

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK && progressDialog.isShowing()) 
    { 
     // DO SOMETHING 
    } 

    // Call super code so we dont limit default interaction 
    super.onKeyDown(keyCode, event); 

    return true; 
} 

với một trong hai phương pháp, biến tiến trìnhDialog/thuộc tính rõ ràng phải nằm trong phạm vi và có thể truy cập.

0

Bạn có thể sử dụng cuộc gọi tĩnh:

public static ProgressDialog show (Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable, DialogInterface.OnCancelListener cancelListener) 

Chỉ cần chắc chắn để thiết lập hủy ngang = true và để thêm callback cancelListener thích hợp.

Ví dụ:

progressDialog = ProgressDialog.show(this, "Fetching data...", "Loading ...", true, true, this); 
0
progressbar.setcancellable(false); 

Nó hoạt động hoàn hảo, tôi đã phải đối mặt với cùng một vấn đề và có những giải pháp.

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