<< Android-Note
Activity内でProgressDialogが表示されない原因
処理の進行状況を表示するのにProgressDialogを使うときはどのようなタイミングでダイアログを表示して閉じるかが重要です。
例えば次のようにダイアログを表示した場合、プログレスダイアログは表示されません。
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.show(); heavyProcess(); progressDialog.dismiss(); } private void heavyProcess() { /** 重い処理 ... */ } }
なぜこれが表示されないかというと時間のかかる処理をUIスレッド内で実行しているからです。
では、どうすればいいかというと次のように処理をスレッド内で実行すればOKです。
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.show(); heavyProcess(); } private void heavyProcess() { new Thread(new Runnable() { @Override public void run() { /** 重い処理 ... */ progressDialog.dismiss(); } }.start(); } }
スレッド内で処理が終わった時にダイアログをdismissしています。
もしスレッド内でテキストビューのテキストを変更するなど、UIスレッドにアクセスすることがあれば、次のようにThread内でHandlerを使ってください。
new Thread(new Runnable() { @Override public void run() { /** 重い処理 ... */ new Handler().post(new Runnable() { @Override public void run() { /** UIスレッドにアクセス。*/ } }); progressDialog.dismiss(); } }.start();
以上がProgressDialogの表示の注意ポイントです。では、また!
© Kaz