素人のアンドロイドアプリ開発日記

ProgressDialogを使ってみる。

2011.02.22

ProgressDialogを使用してみましょう。

ProgressDialogは何かを読み込む時や通信を行う時に処理の進捗を伝える事に利用をします。

ただ、ProgressionDialogでは処理を行う際に一時的なものではなく、開始や終了など、

数秒にわたっての処理になるために、アプリが停止した場合などの処理を考えておく必要があります。

 

2018年追記

見た目は設定しているthemeによりますので、最新のthemeを使えば、最新の見た目になります。

プログレスを表示する場合には、この形式を用いるのですが、短い場合にはローディングを出すだけのダイアログでプログレスをお出さない方が見た目にもすっきるする事が多いです。

progressDialog = new ProgressDialog(this);
progressDialog.setTitle("タイトル");
progressDialog.setMessage("テキスト");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setCancelable(false);
progressDialog.show();

こんな感じ、終わったらdismissすればいいのでよっぽど長い場合以外にはこれだけで対応させてしまう方が多いかもです。

以前の記事

 

progressbar

つまり、読み込み完了後に負荷のかかる動作であれば一度読み込みをキャンセルした方がいいし、

読み込みが完了したら、次(にアプリ立ち上げ時)からその データを利用できるようにしたいのであれば、処理を継続するべきです。

 

ですが、ユーザーがその動作を取りやめているので、

キャンセルにして次回に立ち上げ た際にはキャンセルされた状態からスタートとなるのがよいようです。

 

今回はprogressの管理にThreadを用いて、擬似的にprogressを行います。

Threadの使い方

 

progressPracticeというprojectを作成してください。

今回は、stringをいくつか利用をするので、projectを作成した際にデフォルトで存在している定数を利用して作成をします。

Threadにはrunnableを設定する事でthread内で動作するファンクションを設定できます。

 

package in.andante.android.progress;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;

public class ProgressPractice extends Activity {
 
 private ProgressDialog _dialog;
 private Thread _thread;
 private Runnable _runnable;
 
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 
 _runnable = new Runnable() {
 @Override
 public void run() {
 // TODO Auto-generated method stub
 for(int i =0 ; i < 100 ; i++){
 if(_thread == null)return;
 try{
 Thread.sleep(100);
 }catch(Exception e){}
 _dialog.incrementProgressBy(1);
 }
 _dialog.dismiss();
 _thread = null;
 }
 };
 startProgress();
 }
 
 private void startProgress(){
 _dialog = new ProgressDialog(this);
 _dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
 _dialog.setTitle(R.string.app_name);
 _dialog.setMessage(getString(R.string.hello));
 _dialog.setCancelable(false);
 _dialog.setMax(100);
 _dialog.setProgress(0);
 _dialog.show();
 
 _thread = new Thread(_runnable);
 _thread.start();
 }
 
 public void onPause(){
 super.onPause();
 _dialog.dismiss();
 _thread = null;
 }
}

上記の形で、100ミリ秒に一度1%ずつ伸びていきます。

 _dialog.setMax(100);
 _dialog.setProgress(0);

上記で、最大の値の決定ができます。(下は最初の値)

 

また、

_dialog.incrementProgressBy(1);

で値を1%づつふやします。(正確にはMAX分の1)

_dialog.dismiss();

で処理を終わらせます。

 

今回は処理の最中に、閉じるや、他のアプリケーションが動くなどした場合(onPause)でこの処理を中断するように設定を行いました。

 

同じカテゴリの記事を紹介します

タブのデザインを変更する。タブを下にコンテンツを上に表示したいtabを利用してのActivityを表示する。tabを利用してのviewを作成する。Toastを表示してみる。ダイアログで時刻の入力画面ダイアログでカレンダーで日付入力ダイアログでリストを出現させる。ダイアログを出してボタンで選択をする。アプリのメニューを作成する。Spiner(コンポーネント)を使う。EditTextの文字制限/ヒントとかについてオートコンプリート機能をTextに付加する。EditTextクラスを使用する。レイティングバー(コンポーネント)を使うシークバー(コンポーネント)を使うチェックボックス(コンポーネント)を使うラジオボタン(コンポーネント)を使うトグルボタン(コンポーネント)を使うTextViewクラスで文字列を作成する。

カテゴリー:コンポーネント

公開中のアプリ、是非ダウンロードしてみてください

2chまとめのたね

RSSを利用してさまざまなブログの情報をキュレーションしてくれるアプリ

インストールする

ひらがな戦記

OPENGL ES2 を利用したカルタのソーシャルゲーム

インストールする