2012-03-17 2 views
0

Используя следующий код, который отменяет AsyncTask, когда пользователь нажимает кнопку BACK мобильного устройства.Ручка progressdialog в AsyncTask

protected class UploadFiles extends AsyncTask<String, String, String> implements OnDismissListener { 

private ProgressDialog mDialog; 

protected void onPreExecute() { 

super.onPreExecute(); 
mDialog = new ProgressDialog(UploadFiles.this); 
mDialog.setMessage(progressMsg); 
mDialog.setCancelable(true); 
mDialog.setOnDismissListener(this); 
mDialog.show(); 

} 

protected String doInBackground(String... params) { 

........ 
........ 

} 

public void onDismiss(DialogInterface dialog) { 

this.cancel(true); 
} 

protected void onCancelled() { 

cancel(true); 

} 

Вышеупомянутая реализация отменяет AsyncTask, когда пользователь нажимает кнопку BACK мобильного устройства.

Поскольку задача - долгое время, я хочу предоставить пользователю предупреждение (предупреждение) о том, хочет ли пользователь отменить операцию или нет, когда пользователь нажимает кнопку BACK на мобильном устройстве.

Я не получаю кнопку НАЗАД обратный вызов на onBackPressed() когда progressdialog отображается & пользователь нажимает на кнопку назад.

Другой вопрос, который я столкнулся в Samsung Tablet P6200 & не в Android эмулятора:

Когда progressdialog отображается & пользователь касается экрана за пределами progressdialog области, progressdialog увольняет.

Как я могу прекратить отклонение progressdialog?

Любые предложения/подсказки для реализации того же будут полезны.

}

ответ

0

Если вы используете setCancelable(false) затем нажав вне диалога не отменит его.

И вы должны вызвать ProgressDialog#show() в AsyncTask, потому что ProgressDialog использует анимацию, которая держит в руках нити EventHandler он работает. Так что в этом случае вам нужно всего 3 темы.

(Это действительно дизайн ошибка в Android)

+0

Спасибо за ваш комментарий. Я вызываю mDialog.show() из onPreExecute() из AsyncTask. Как отображать предупреждение, когда пользователь нажимает кнопку BACK? – chiranjib

+0

Используйте 'setOnCalcelListener()' –

1

Для отклоняя progressdialog Сначала удалите

mDialog.setCancelable (истина);

с вашего кода затем попробуйте использовать этот код в соответствии с вашими требованиями.

private class DownloadQuestion extends AsyncTask<String, Void, String> 
    {   

     @Override 
     protected void onPreExecute() 
     { 

      pd = ProgressDialog.show(Activity_SplashScreen.this, "","Please wait. Loading latest questions...", true,false);      

      super.onPreExecute(); 
     } 

     @Override 
     protected String doInBackground(String... urls) 
     { 
      //Write background code here Code 
      return ""; 
     } 

     @Override 
     protected void onPostExecute(String response1) 
     { 
      Intent intent = new Intent(Activity_SplashScreen.this, Activity_Main.class); 
      startActivity(intent); 
      finish(); 

      if (pd != null && pd.isShowing()) 
       pd.dismiss(); 

     } 
    } 
1

Вы можете использовать setCancelable(false) остановить кнопку назад или выстукивая от диалога закрытия.

Если вы хотите показать предупреждение, вам необходимо будет ввести setOnCancelListener() или setOnDismissListener(), чтобы получать уведомления о том, что пользователь уволен. Обязательно отмените свою AsyncTask, если пользователь отменит ее, в противном случае, даже если ваше диалоговое окно отклонено, AsyncTask все еще работает

Смежные вопросы