2011-11-21 11 views
7

Mam AsyncTask i chcę, aby to wyrównać wykonanie po naciśnięciu przycisku Wstecz. Chcę też, aby aplikacja powróciła do poprzednio wyświetlanej aktywności. Wygląda na to, że udało mi się zatrzymać zadanie, ale aplikacja nie powraca do poprzedniego działania. Jakieś pomysły? To jest wyciąg z mojego koduAndroid - Zatrzymaj AsyncTask po naciśnięciu przycisku Wstecz i wróć do poprzedniej aktywności

private class MyTask extends AsyncTask<Void, Void, Void> implements OnDismissListener{ 
    private boolean exception= false; 

    @Override 
    protected void onPreExecute(){ 
     pd = ProgressDialog.show(
       IscrizioniActivity.this, 
       "Please wait...", 
       "Loading the data", 
       true, 
       true, 
       new DialogInterface.OnCancelListener(){ 
        public void onCancel(DialogInterface dialog) { 
         MyTask.this.cancel(true); 
        } 
       } 
     ); 
    } 

    @Override 
    protected Void doInBackground(Void... voids) { 
     //do something 
     return (null); 
    } 

    @Override 
    protected void onPostExecute(Void voids) { 
     pd.dismiss(); 
     //do something 

    } 

    public void onDismiss(DialogInterface dialog) { 

     this.cancel(true); 
    } 

} 

Pozdrawiam.

+0

ta odpowiedź może pomóc -> http://stackoverflow.com/questions/7993023/stop-a-thread-pobieranie-obrazy-kiedy-działalność-wykończenia/7993176 # 7993176 – guleryuz

Odpowiedz

7
pd.setCancelable(true); 
    pd.setOnCancelListener(cancelListener); 
    bCancelled=false; 

pd is your progressdialog box 

i teraz używać cancelListner

OnCancelListener cancelListener=new OnCancelListener(){ 
    @Override 
    public void onCancel(DialogInterface arg0){ 
     bCancelled=true; 
     finish(); 
    } 
}; 
+1

To częściowo załatwiło sprawę. Anulowałem "implementuje OnDismissListner" i metodę OnDismiss. I dodano finis() w on Cancel. – lugeno

+0

co to jest bCancelled? – Pradeep

+0

@pradeep jest używane do sprawdzania logicznego, czy jest anulowane czy nie –

1

Czy próbowałeś dodanie finish() połączenia w metodzie onDismiss():

public void onDismiss(DialogInterface dialog) { 
    this.cancel(true); 
    IscrizioniActivity.this.finish(); 
} 
+0

Próbowałem tej metody, ale nie zrobił "lewy. – lugeno

2

W swojej działalności, zastąpić Wstecz zatrzymać AsyncTask w nim, i nazywają wykończenie dla bieżącej działalności.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     MyTask.cancel(); 
     IscrizioniActivity.this.finish(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

Co masz na myśli z MyTask.stop? Nie ma takiej metody. – lugeno

+0

Teraz problem dotyczy YourCurrentActivity.finish(). Nie można utworzyć statycznego odwołania do metody wykańczania metodą niestatyczną() od typu Działanie – lugeno

+0

Wiem o tym. Musiałem umieścić to przed finis(). Teraz sprawdzę, czy to działa. – lugeno

1

Spróbuj tego ...

progress_dialog.setCancelable(true); 
progress_dialog.setOnCancelListener(new OnCancelListener() { 

    @Override 
    public void onCancel(DialogInterface dialog) { 
     // TODO Auto-generated method stub 
     YourActivity.this.finish(); 
     } 
    }); 
Powiązane problemy