Android, ProgressDialog で進捗状況ダイアログを表示する
2010年09月30日
ProgressDialog
を表示し、Timer
で10秒経過すると task
が実行される。
task
では、ProgressDialog
が消されて、Handler
から結果メッセージを表示させる Runnable
を呼ぶ。
View
の処理はメインスレッドでなければ実行できないので Handler
を使ってメインスレッドにコールバック処理をさせる。
メソッド内部の無名クラスからメソッドのローカル変数を参照するには、そのローカル変数を final
宣言する。
public class ProgressExampleActivity extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button startButton = (Button) findViewById(R.id.start_button); startButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.start_button: start(); break; } } private void start() { final Handler handler = new Handler(); final Timer timer = new Timer(); final ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setTitle("処理中"); progressDialog.setMessage("しばらくお待ちください。"); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setCancelable(true); progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { timer.cancel(); } }); TimerTask task = (new TimerTask() { @Override public void run() { progressDialog.dismiss(); handler.post(new Runnable() { @Override public void run() { setResult(timer); } }); } }); progressDialog.show(); timer.schedule(task, 1000 * 10); } private void setResult(Timer timer) { TextView tv = (TextView) findViewById(R.id.result_msg); tv.setText("task is done."); timer.cancel(); } }
Google Androidプログラミング入門
posted with amazlet at 10.09.30
江川 崇 竹端 進 山田 暁通 麻野 耕一 山岡 敏夫 藤井 大助 藤田 泰介 佐野 徹郎
アスキー・メディアワークス
売り上げランキング: 10779
アスキー・メディアワークス
売り上げランキング: 10779