package org.android.textbook4.asynctasksample;
import java.util.List;
import org.android.textbook4.asynctasksample.ImageLoadAsyncTask.ImageLoadAsyncTaskListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.graphics.Bitmap;
public class AsyncTaskSampleActivity extends Activity implements
OnClickListener {
private ImageLoadAsyncTask mAsyncTask;
private ProgressDialog mProgressDialog;
private ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_async_task_sample);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
mImageView = (ImageView) findViewById(R.id.imageView);
mProgressDialog = new ProgressDialog(this);
}
@Override
public void onClick(View v) {
// タスクを実行する
mAsyncTask = new ImageLoadAsyncTask(this, mImageLoadAsyncTaskListener);
mAsyncTask.execute("ic_launcher-web.png", "ic_launcher-web.png",
"ic_launcher-web.png");
}
@Override
public void onPause() {
super.onPause();
if (!mAsyncTask.isCancelled()) {
// タスクのキャンセル
mAsyncTask.cancel(true);
}
}
private ImageLoadAsyncTaskListener mImageLoadAsyncTaskListener = new ImageLoadAsyncTaskListener() {
/**
* プログレスダイアログのキャンセルリスナー
*
* @note バックキー押下でダイアログを消すと呼ばれます
* */
private DialogInterface.OnCancelListener mOnCancelListener = new OnCancelListener() {
public void onCancel(DialogInterface dialogInterface) {
// タスクのキャンセル
mAsyncTask.cancel(true);
}
};
public void onStartBackgroundTask() {
// タスクの開始
// バックグランド実行中であることを、ユーザーに知らせるため、
// プログレスダイアログを表示
mProgressDialog.setMessage("Loading...");
mProgressDialog.setMax(3);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// キャンセルリスナーの登録
mProgressDialog.setOnCancelListener(mOnCancelListener);
mProgressDialog.show();
}
public void onProgressUpdate(int progress) {
// 進捗状況の更新
mProgressDialog.setProgress(progress);
}
public void onEndBackgroundTask(List<Bitmap> result) {
// バックグランド処理の結果を受け取る
mProgressDialog.dismiss();
mImageView.setImageBitmap(result.get(0));
}
public void onCancelledTask() {
// キャンセル処理
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
}
};
}