2014-08-28 50 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

相關問題