5

onPreExecute で ProgressDialog を表示し、onPostExecute で再び非表示にする AsyncTask があります。

final class UploadTask extends AsyncTask {
   ProgressDialog dialog = new ProgressDialog(...);

   protected onPreExecute() {
      dialog.show();
   }
   protected onPostExecute() {
      dialog.hide();
   }
};

ダイアログはキャンセル可能で、AsyncTask の実行中にキャンセル ボタンを押すと実際に消えます。

これが発生した場合、AsyncTask もキャンセルするコードを実行したいと思います (現時点では、ProgressDialog が消えても、AsyncTask は実行を続け、最終的には完了します)。ProgressDialog から独自のクラスを派生させてみましたが、

setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
   /* do something */
   }
};

(または OnCancelListener に似たもの) ですが、これは決して呼び出されません。

何か案は?ProgressDialog が表示されている間に、ユーザーが実行中の AsyncTask をキャンセルするメカニズムが必要です。

4

2 に答える 2

14

私はこれをテストしていませんが、次のようなことを試してください:

    final class UploadTask extends AsyncTask implements OnDismissListener{
       ProgressDialog dialog = new ProgressDialog(...);

       protected onPreExecute() {
           dialog.setOnDismissListener(this);
          dialog.show();
       }
       protected onPostExecute() {
          dialog.hide();
       }

       @Override
        public void onDismiss(DialogInterface dialog) {
            this.cancel(true);
        }
};
于 2010-11-01T20:38:20.777 に答える
1

私はあなたがこれを探していると思います: onCancelled()

http://developer.android.com/reference/android/os/AsyncTask.html

于 2010-11-01T20:42:51.613 に答える