2014-10-10 19 views
0

我開始一個新的活動OnPostExecute並致電pDialog.dismiss(),但是當我從新的活動回到上一個活動時 - 進度對話框仍在運行。 在我轉移到其他活動的那一刻,我該如何永久解僱它?如何在我轉移到其他活動時關閉進度對話框?

這是我的AsyncTask類。

public class FindRideTask extends AsyncTask<Void, Void, Void> 
{ 
    private ProgressDialog pDialog; 

    @Override 
    protected void onPostExecute(Void result) { 

     if(pDialog!=null && pDialog.isShowing()) 
     { 
      pDialog.dismiss(); 
     } 
     Intent intent = new Intent(getApplicationContext(), FindRideBoard.class); 
     Bundle bundle = new Bundle(); 
     bundle.putParcelableArrayList("Results", ridesList); 
     intent.putExtras(bundle); 
     startActivity(intent); 

    } 


    @Override 
    protected void onPreExecute() { 

     pDialog = new ProgressDialog(FindRide.this); 
     pDialog.show(FindRide.this, "מתחבר לשרת", "אנא המתן"); 
    } 


    @Override 
    protected Void doInBackground(Void... params) { 
     s_ParseLogic = ParseLogic.getInstance(); 

     try 
     { 
      ArrayList<ParseObject> ridesFromQuery = (ArrayList<ParseObject>)s_ParseLogic.FindRides(sourceList.getText().toString(), destinationList.getText().toString(), time_picker.getText().toString(), m_date.getText().toString()); 
      ridesList = new ArrayList<Ride>(); 

      for(int i = 0 ; i < ridesFromQuery.size() ; i++) 
      { 
       ParseObject obj = ridesFromQuery.get(i); 
       ridesList.add(new Ride((String)obj.get("Source"), (String)obj.get("Destination"), (String)obj.get("Day"),(String) obj.get("Time"), (String)obj.get("IsPermanent"), (String)obj.get("Driver"), (String)obj.get("Driver Phone"))) ; 
      } 
     } 
     catch(ParseException e) 
     { 
     } 

     return null; 
    } 

} 
+1

在postexecute()的意圖調用之前使用'pDialog.dismiss();'。 – prakash 2014-10-10 08:02:05

+1

'pDialog.dismiss();'應該是'onPostExecute()'的第一條語句' – 2014-10-10 08:03:08

+0

我以前試過這個。它仍在運行:( – Sharon182 2014-10-10 08:07:54

回答

1

這裏getApplicationContext()是你ApplicationContext。因此,與

pDialog = new ProgressDialog(YourActivityName.this); 

變化和onPostExecute()方法

@Override 
    protected void onPostExecute(Void result) { 

    if(pDialog!=null && pDialog.isShowing()){ 

    pDialog.dismiss(); 
    } 

    Intent intent = new Intent(getApplicationContext(), FindRideBoard.class); 
    Bundle bundle = new Bundle(); 
    bundle.putParcelableArrayList("Results", ridesList); 
    intent.putExtras(bundle); 
    startActivity(intent); 

} 

UPDATE

摧毀你ProgressDialogonDestroy()Activity的方法。

@Override 
protected void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    if(pDialog!=null && pDialog.isShowing()){ 

    pDialog.dismiss(); 
    } 
} 
+0

不幸的是,同樣的問題... – Sharon182 2014-10-10 08:14:46

+0

這是非常奇怪的 – Sharon182 2014-10-10 08:15:07

+0

是您的AsyncTask是一個獨立的類? – Piyush 2014-10-10 08:34:19

0

你可以像@ X'Factor說,但駁回您的活動的的onStop()methodm對話框當活動不再可見它被調用。

@Override 
protected void onStop() { 
    super.onStop(); 
    if(pDialog!=null && pDialog.isShowing()){ 

    pDialog.dismiss(); 
    } 
} 

還要檢查,如果你已經開始在活動的的onResume()您的AsyncTask這可能導致對話出現在首位。

相關問題