2014-08-28 32 views
0

这个问题已经很多次在这个论坛上,我已经实现了它使用进度对话框上的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(); 

    } 

最后我也overrided 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是否需要进行overrided或Cancellistener会做。

感谢

回答

-1

您应该使用

dialog.setCancelable(false); 
dialog.setCanceledOnTouchOutside(false); 
+0

感谢他的工作。我现在感到很无聊,要检查进度对话中所有给定的apis。 – akg 2014-08-28 09:21:56

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(); 
    } 
+0

这意味着我必须取消对progressDialog CancelListener? – akg 2014-08-28 09:02:19

+0

你必须删除super.onBackPressed();对于asynctask正在运行的情况。这可能是你的问题。 – Jithu 2014-08-28 09:03:26

+0

cancelListener到底做了什么?除Back按钮之外,是否还需要统计用户界面上的点击次数以取消对话? – akg 2014-08-28 09:04:01

相关问题