【Android】プログレスダイアログの表示2
プログレスダイアログの表示方法です。
ボタンを押すと、下記のようなダイアログを表示します。
●ソースコード
「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; } } }