Android - остановите AsyncTask при нажатии кнопки назад и вернитесь к предыдущей активности - PullRequest
7 голосов
/ 21 ноября 2011

У меня есть AsyncTask, и я хочу, чтобы он выполнял выполнение при нажатии кнопки назад.Я также хочу, чтобы приложение вернулось к предыдущей активности.Кажется, мне удалось остановить задачу, но приложение не возвращается к предыдущему действию.Есть идеи?Это выдержка из моего кода

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);
    }

}

С уважением.

Ответы [ 4 ]

7 голосов
/ 21 ноября 2011
pd.setCancelable(true);
    pd.setOnCancelListener(cancelListener);
    bCancelled=false;

 pd is your progressdialog box

и теперь используйте cancelListner

    OnCancelListener cancelListener=new OnCancelListener(){
    @Override
    public void onCancel(DialogInterface arg0){
        bCancelled=true;
        finish();
    }
};
2 голосов
/ 21 ноября 2011

В своей деятельности переопределите кнопку «Назад», остановите в ней AsyncTask и вызовите финиш для текущей активности.

@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);
}
1 голос
/ 22 марта 2013

Попробуйте это ...

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

    @Override
    public void onCancel(DialogInterface dialog) {
        // TODO Auto-generated method stub
        YourActivity.this.finish();
        }
    });
1 голос
/ 21 ноября 2011

Вы пытались добавить вызов finish() в методе onDismiss():

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