2014-10-10 2 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

используйте 'pDialog.dismiss();' перед вызовом намерения в postexecute(). – prakash

+1

'pDialog.dismiss();' должно быть вашим первым утверждением в 'onPostExecute()' –

+0

Я пробовал это раньше. он по-прежнему работает :( – Sharon182

ответ

1

Здесь getApplicationContext() является Context вашего Application. Меняем с

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:

Destroy ваш метод вашего ActivityProgressDialog в onDestroy().

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

    pDialog.dismiss(); 
    } 
} 
+0

К сожалению, та же проблема ... – Sharon182

+0

Это очень странно – Sharon182

+0

Является ли ваш AsyncTask отдельным классом? – Piyush

0

Вы можете сделать это как @ X'Factor сказал, но закрыть диалоговое окно в вашей деятельности в OnStop() methodm, которые не дозвонились, когда активность больше не видна.

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

    pDialog.dismiss(); 
    } 
} 

Также проверьте, если вы начинаете свой AsyncTask в деятельности по onResume(), который может вызвать диалоговое окно появится в первую очередь.

Смежные вопросы