这个问题在这个论坛已经多次了,我已经在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会这样做。
由于
答案 0 :(得分:1)
您需要覆盖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();
}
答案 1 :(得分:-1)
你应该使用
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);