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 をキャンセルするメカニズムが必要です。