ProgressDialog表示時の操作について

592 views
Skip to first unread message

Qoo

unread,
Jan 9, 2012, 11:48:49 PM1/9/12
to 日本Androidの会
お世話になっております。

データベースへのアクセス等時間のかかる処理で、AsyncTaskクラスを使用しています。
onPreExecute()にてProgressDialogを表示しているのですが、ProgressDialog表示中に後ろに見えているアプリ
画面をクリックすると、操作できてしまいます。
ProgressDialog表示中は後ろのアプリ画面は全く操作できないようにしたいのですが、どうすればいいでしょうか。

黒猫ニャモン

unread,
Jan 10, 2012, 1:56:43 AM1/10/12
to android-g...@googlegroups.com
AsyncTaskは使ったことが無いのですが、元々重い処理をしている間にも、UIを停止せずに操作できるようにするために使うものではないでしょうか?

私は以下のようなクラスを作って、RunWithProgressのrunnableに重い処理を渡すようにしています。
runnable処理中はクルクル。処理が終わったらダイアログを閉じます。

import android.app.ProgressDialog;
import android.content.Context;

public class RunWithProgress {

private Runnable _runnable = new Runnable() {

public void run() {
try {
runnable.run();
} catch (Exception e) {
e.printStackTrace();
}
progressDialog.dismiss();
}
};

private ProgressDialog progressDialog = null;
private Runnable runnable = null;

public RunWithProgress(Context context, String message, Runnable runnable) {
this.runnable = runnable;

progressDialog = new ProgressDialog(context);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage(message);
progressDialog.show();

new Thread(_runnable).start();
}
}

Ishikawa Hiromi

unread,
Jan 10, 2012, 2:39:36 AM1/10/12
to android-g...@googlegroups.com
Qooさんこんにちは

ProgressDialog は正しく使っていれば、Qoo さんの期待通りの動作をします。
コードを見ないとなんとも言えないのですが、例えば、
show()メソッド渡している(もしくはProgressDialogのコンストラクタで渡している)Context
が、後ろに見えているアクティビティとは違うものであると言ったことは考えられますが、そんなことはないでしょうか?

堀江邦浩

unread,
Jan 15, 2012, 8:57:59 AM1/15/12
to android-g...@googlegroups.com
遅くなりましたが、解決しました。
setCancelable(false);を追記したら大丈夫でした。

progressDialog = new ProgressDialog(this);
progressDialog.setCancelable(false);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("検索中です…");
progressDialog.setIndeterminate(true);
progressDialog.show();

こんな感じです。

Reply all
Reply to author
Forward
0 new messages