[英]Cancelling the Async Task and returning to previous activity on pressing Back Button
這個問題在這個論壇上已經很多次了,我已經在Progress Dialog上使用CancelListener實現了它,並且效果很好。 但是有一個問題。當我單擊“后退”按鈕時,它會按預期返回到先前的活動。但是,當我單擊屏幕的任何其他部分(即,在對話框或活動的UI上)時,它也會取消對話框並返回到上一個活動。 如何阻止這種情況的發生?
class LoadAllCategories extends AsyncTask<String, String, String> {
int flag=0;
public LoadAllCategories(CategoryActivity categoryActivity) {
OnCancelListener cancelListener=new OnCancelListener(){
@Override
public void onCancel(DialogInterface arg0){
finish();
}
};
pDialog = new ProgressDialog(CategoryActivity.this);
pDialog.setMessage("Loading Topics...");
pDialog.setIndeterminate(true);
pDialog.setCancelable(true);
pDialog.setOnCancelListener(cancelListener);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
category.setVisibility(View.INVISIBLE);
company.setVisibility(View.INVISIBLE);
pDialog.show();
}
這是我的onDestroy方法殺死AsyncTask-
@Override
protected void onDestroy() {
if (mTask != null && mTask.getStatus() != AsyncTask.Status.FINISHED)
{
mTask.cancel(true);
}
super.onDestroy();
}
最后,我還重寫了onBackPressed-
@Override
public void onBackPressed() {
super.onBackPressed();
if (mTask != null && mTask.getStatus() != AsyncTask.Status.FINISHED)
{
mTask.cancel(true);
}
Intent intent_main = new Intent(CategoryActivity.this,MainActivity.class);
intent_main.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent_main);
finish();
}
我也想澄清一下我的疑問,是否需要重寫onBackpressed或Cancellistener會這樣做。
謝謝
您需要重寫onBackPress()
並編寫代碼以取消asynctask
。 在執行此操作之前,請確保根據條件編寫代碼,否則,您可能將無法返回上一個活動。
if(asynctaskrunFlag) {
// Code to cancel asynctask
} else {
super.onBackPressed();
} that is,
if (mTask != null && mTask.getStatus() != AsyncTask.Status.FINISHED)
{
mTask.cancel(true);
} else {
super.onBackPressed();
}
你應該用
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.