質問

私はasynctaskを持っています。そこでは、onpreexecuteで進行状況を示し、onpostexecuteで再び非表示にします。

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

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

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

これが起こったら、Asynctaskをキャンセルするためにいくつかのコードを実行したいと思います(現在、彼が進行中に消えると思っても、Asynctaskは実行され続け、最終的に完了します)。 ProgressDialogから自分のクラスを導き出してみました

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

(またはoncancellistenerと同様のもの)が、これは単に呼び出されることはありません。

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

役に立ちましたか?

解決

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

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

他のヒント

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top