2012-04-23 28 views
6

tôi có một ProgressDialog thực hiện như thế này:Tại sao ProgressDialog của tôi nghe trên BẤT K KEY KEY (chạm) thay vì backbutton để loại bỏ?

// show progress dialog while date is loading 
     progressDialog = ProgressDialog.show(XYActivity.this, getResources().getString(R.string.progress_dialog_please_wait), getResources().getString(R.string.progress_dialog_loading), true); 
     progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 
      @Override 
      public void onCancel(DialogInterface dialog) { 
       cancel(true); 
       Log.w(LOGTAG, "loading cancelled via back button"); 
      } 

     }); 
     progressDialog.setCancelable(true); 

ProgressDialog này được thực hiện bên trong một AsyncTask (PreExecute), do đó hủy bỏ phương pháp (true) dừng AsyncTask. Điều này tất cả hoạt động tốt.

Các vấn đề là, mà tôi có thể hủy các ProgressDialog với bất kỳ cảm ứng ngẫu nhiên trên màn hình của tôi. Tôi muốn loại bỏ hộp thoại chỉ bằng cách nhấn nút backbutton. Làm ơn giúp tôi! Cảm ơn các bạn.

Trả lời

7

này đã làm việc cho tôi:

@Override 
protected void onPreExecute() { 
    progressDialog = ProgressDialog.show(context, "Title", "Loading...", true, true, new OnCancelListener() { 
     @Override 
     public void onCancel(DialogInterface dialog) { 
      cancel(true); 
     } 
    }); 
    progressDialog.setCanceledOnTouchOutside(false); 
} 

Các setCanceledOnTouchOutside đề xuất bởi GedankenNebel là khá sạch sẽ.

1

hãy thử hướng dẫn dưới đây

không chắc chắn về toàn bộ nút hủy ... tôi đã nghe báo cáo về phương thức onCancel() không kích hoạt đúng cách. giải pháp của tôi chỉ bao gồm thực hiện một nút bình thường trên hộp thoại với một cuộc gọi để quay trở lại bất cứ khi nào nút được nhấn.

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 
      cancelDialog.dismiss(); 
     } 
    }); 
    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"); 

giải pháp khá đơn giản, nhưng nó lừa;) cũng chỉ để lưu ý rằng cancelDialog là một hoạt động lau biến, nếu bạn không cần phải gọi nó từ nơi khác, sau đó bạn sẽ có thể nhận được ngay với chỉ giới hạn phạm vi của biến cho phương pháp đó.

+0

cảm ơn, sau khi thêm 'cancelDialog.setCancelable (false);' vào mã của bạn làm việc cho tôi, nhưng tôi đã tìm thấy giải pháp dễ dàng hơn, hãy xem bên dưới – GedankenNebel

+15

Tôi tìm thấy giải pháp với 'progressDialog.setCanceledOnTouchOutside (false);':))) – GedankenNebel

+1

ok ..! Bất kỳ cách nào mà vấn đề của bạn đã được giải quyết ...! cảm ơn..! – Dinesh

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