LoginSignup
4
5

More than 5 years have passed since last update.

Androidでボタン押下後、ProgressDialogを出す

Posted at

時間が掛かる処理を動かす場合、処理中を示すのインジケータ画像(?)や、パーセントなどユーザに処理進捗状況をフィードバックするべきです。

Androidにおいては、専用のProgressDialogという仕組みがあるため
画面に表示する文字を設定すれば、画面にインジケータ画像ぽいものを
短時間で表示できます。

環境
・Android API Level9(2.3)で開発しています。

処理例
・画面上に配置したボタンを押下して処理開始
・ボタン押下時に、ProgressDialog表示
・非同期で処理を開始
・処理終了時に、ProgressDialog非表示

MainActivity.java
//ボタン表示
Button submit = (Button) findViewById(R.id.regist);
submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        final String input = get_depost_json();
        final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
        progressDialog.setTitle("通信待機中・・・");
        progressDialog.setMessage("登録しています。");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setCancelable(false);
        progressDialog.show();

        new AsyncTask<Void, Void, Integer>() {
            @Override
            protected Integer doInBackground(Void... p) {
                //通信の処理(結果をレスポンスコードの数値で返す)
                return 200;
            }
            @Override
            protected void onPostExecute(Integer res_code) {
                if (res_code == 200) {
                    progressDialog.hide();
                    Toast.makeText(MainActivity.this, "登録が完了しました。", Toast.LENGTH_SHORT).show();
                } else {
                    progressDialog.hide();
                    Toast.makeText(MainActivity.this, "登録に失敗しました。", Toast.LENGTH_SHORT).show();
                }
            }
    }.execute();
    }
});

ボタンのイベントハンドラから呼ぶ、OnClickは同期処理となるので
Dialogを表示する処理を書いた上で、非同期で(Asyncを用いて)
処理を動かす必要がありました。

この例では、ぐるぐる回るインジケータ画像を表示するだけですが
進捗状況を可視化できる仕組みを検討いたします。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5