【Android】プログレスダイアログの表示2

2019年7月29日

プログレスダイアログの表示方法です。
ボタンを押すと、下記のようなダイアログを表示します。
プログレスダイアログ

●ソースコード
「R.layout.main」にボタンを配置し、
「android:onClick="BtnClick"」を設定し使用するソースです。

private ProgressDialog progressDialog1;
private ProgressThread1 progressThread1;
static final int PROGRESS_DIALOG1 = 0;
public class TestDialog extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}
	//ボタンクリックイベント(XMLにandroid:onClickを記述)
	public void BtnClick(View v) {
		if(v.getId() == R.id.button0)
		{
			showDialog(PROGRESS_DIALOG1);
		}
	}
	@Override
	protected Dialog onCreateDialog(int id) {
		// ダイアログが複数ある場合にidを使用する
		if (id == PROGRESS_DIALOG1) {
			//プログレスダイアログ表示
			progressDialog1 = new ProgressDialog(this);
			progressDialog1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
			progressDialog1.setMax(100);
			progressDialog1.setMessage("処理中です...");
			progressDialog1.setButton("Cancel", new DialogInterface.OnClickListener(){
				public void onClick(DialogInterface dialog, int whichButton) {
					dismissDialog(PROGRESS_DIALOG1);
					progressThread1.setState(ProgressThread1.STATE_DONE);
				}
			});
			return progressDialog2;
		}
	}
	@Override
	protected void onPrepareDialog(int id, Dialog dialog) {
		super.onPrepareDialog(id, dialog);
		if (id == 0) {
			progressThread1 = new ProgressThread1(handler1);
  			progressThread1.start();
		}
	}
	private final Handler handler1 = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			int total = msg.getData().getInt("total");
			progressDialog1.setProgress(total);
			if (total >= 100){
				TextView textview1 = (TextView)findViewById(R.id.textview1);
				textview1.setText("成功しました!");
				dismissDialog(PROGRESS_DIALOG1);
				progressThread1.setState(ProgressThread1.STATE_DONE);
			}
		}
	};
	private class ProgressThread1 extends Thread {
		Handler mHandler;
		final static int STATE_DONE = 0;
		final static int STATE_RUNNING = 1;
		int mState;
		int total;
		ProgressThread1(Handler h) {
			mHandler = h;
		}
		public void run() {
			mState = STATE_RUNNING;
			total = 0;
			while (mState == STATE_RUNNING) {
				try {
					Thread.sleep(100);
				}
				catch (InterruptedException e) {
					Log.e("ERROR", "Thread Interrupted");
				}
				Message msg = mHandler.obtainMessage();
				Bundle b = new Bundle();
				b.putInt("total", total);
				msg.setData(b);
				mHandler.sendMessage(msg);
				total++;
			}
		}
		public void setState(int state) {
			mState = state;
		}
	}
}

スポンサーリンク