ダイアログに消去について

3,921 views
Skip to first unread message

レイ

unread,
Jun 15, 2009, 10:57:14 PM6/15/09
to 日本Androidの会
おせわになっております。レイです。

Androidのダイアログはshowで表示後に、クリックリスナーを登録すると
リスナー内でdialog.dismiss()をコールすると
表示したダイアログを消去できるみたいですが、

ボタンの無いダイアログを一定期間表示後に消去したい場合はどのようにしたら良いのでしょうか?

Toastにしてしまった場合、表示時間を指定できないようですので使いづらいです。

ダイアログの使用例としては、アプリがある処理を行なっている場合に
「処理中です」のようなダイアログを表示し
処理が完了したらコールバックを受け、表示しているダイアログを消去するような場合を想定しています。


どなたかご存知でしたらご教授をお願いいたします。


Keiji Ariyama

unread,
Jun 15, 2009, 11:20:57 PM6/15/09
to android-g...@googlegroups.com
レイさん

 有山@大阪です。

> ボタンの無いダイアログを一定期間表示後に消去したい場合はどのようにした
ら良いのでしょうか?

 一定時間後が良いと言う事であれば、TimerにTimerTaskを登録すれば、指定し
た時間以降にTimerTaskを処理をさせることが出来ますので、そちらを使えば良
いかと思います。 

 ただ、TimerTaskや他のスレッドからGUI関係を操作するには、Handlerを使っ
てrunnableをメインスレッドで実行する必要があります。
 昔、これでハマりました。

AndroidでTimer
http://ccl.c-lis.co.jp/modules/d3blog/details.php?bid=62

 また、処理が完了した後と言うことであれば、処理スレッドからHandlerに対
して、ダイアログを消去する処理を実装したRunnbaleをpostしてやればいいかと。

 またまた出先ですので皆さん補足をお願いします。

PS. 渡辺さん、前回フォローありがとうございました。

/*********************************************
有限会社シーリス
代表 有山 圭二
@Address
〒530-0044
大阪市北区東天満二丁目2番5号
第2新興ビル 601
@Web http://www.c-lis.co.jp
*********************************************/

egg

unread,
Jun 15, 2009, 11:21:29 PM6/15/09
to android-g...@googlegroups.com
江川です。
ダイアログのインスタンスを、アクティビティの属性として持っておき
一定時間経過後にdismissを呼べばよいと思います。
例えばこんな感じです。

private Handler handler = new Handler();
private ProgressDialog dialog;
private final Runnable callback = new Runnable() {
public void run() {
dialog.dismiss();
}
};

・・・以下メソッドなどの定義

・・・時間がかかる処理が終わった後に
handler.post(callback);



2009/06/16 11:57 に レイ<beginner...@gmail.com> さんは書きました:
--
------------------------------------------
EGAWA Takashi

レイ

unread,
Jun 17, 2009, 9:50:48 PM6/17/09
to 日本Androidの会
TO)有山さん
いつもお世話になっております。レイです。

前回に引き続き、ご教授いただきありがとうございます。

すんなりは出来ませんでしたが
江川さんからご教授いただいた内容とあわせると
ダイアログをタイマーで消すことが出来ました。
ありがとうございます。

今後もよろしくお願いいたします。


On 6月16日, 午後12:20, Keiji Ariyama <keiji_ariy...@c-lis.co.jp> wrote:
> レイさん
>
>  有山@大阪です。
>
> > ボタンの無いダイアログを一定期間表示後に消去したい場合はどのようにした
>
> ら良いのでしょうか?
>
>  一定時間後が良いと言う事であれば、TimerにTimerTaskを登録すれば、指定し
> た時間以降にTimerTaskを処理をさせることが出来ますので、そちらを使えば良
> いかと思います。
>
>  ただ、TimerTaskや他のスレッドからGUI関係を操作するには、Handlerを使っ
> てrunnableをメインスレッドで実行する必要があります。
>  昔、これでハマりました。
>
> AndroidでTimerhttp://ccl.c-lis.co.jp/modules/d3blog/details.php?bid=62
>
>  また、処理が完了した後と言うことであれば、処理スレッドからHandlerに対
> して、ダイアログを消去する処理を実装したRunnbaleをpostしてやればいいかと。
>
>  またまた出先ですので皆さん補足をお願いします。
>
> PS. 渡辺さん、前回フォローありがとうございました。
>
> /*********************************************
> 有限会社シーリス
> 代表 有山 圭二
> @Address
> 〒530-0044
> 大阪市北区東天満二丁目2番5号
> 第2新興ビル 601
> @Webhttp://www.c-lis.co.jp
> *********************************************/
>
>
>
> レイ wrote:
> > おせわになっております。レイです。
>
> > Androidのダイアログはshowで表示後に、クリックリスナーを登録すると
> > リスナー内でdialog.dismiss()をコールすると
> > 表示したダイアログを消去できるみたいですが、
>
> > ボタンの無いダイアログを一定期間表示後に消去したい場合はどのようにしたら良いのでしょうか?
>
> > Toastにしてしまった場合、表示時間を指定できないようですので使いづらいです。
>
> > ダイアログの使用例としては、アプリがある処理を行なっている場合に
> > 「処理中です」のようなダイアログを表示し
> > 処理が完了したらコールバックを受け、表示しているダイアログを消去するような場合を想定しています。
>
> > どなたかご存知でしたらご教授をお願いいたします。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

レイ

unread,
Jun 17, 2009, 9:54:09 PM6/17/09
to 日本Androidの会
TO)江川さん
おせわになります。レイです。

ご教授いただいた内容で、ダイアログを消すことが出来ました。

追加で質問なのですが
ご教授いただいた内容で消すことができるダイアログは
ProgressDialog だけなのでしょうか?

AlertDialogだとビルダーを使用しないと生成できないので
dismissが使えないようですが、他に消し方があるのでしょうか?

On 6月16日, 午後12:21, egg <t.eg...@gmail.com> wrote:
> 江川です。
> ダイアログのインスタンスを、アクティビティの属性として持っておき
> 一定時間経過後にdismissを呼べばよいと思います。
> 例えばこんな感じです。
>
> private Handler handler = new Handler();
> private ProgressDialog dialog;
> private final Runnable callback = new Runnable() {
> public void run() {
> dialog.dismiss();
> }
> };
>
> ・・・以下メソッドなどの定義
>
> ・・・時間がかかる処理が終わった後に
> handler.post(callback);
>
> 2009/06/16 11:57 に レイ<beginner.engi...@gmail.com> さんは書きました:
>
>
>
>
>
>
>
> > おせわになっております。レイです。
>
> > Androidのダイアログはshowで表示後に、クリックリスナーを登録すると
> > リスナー内でdialog.dismiss()をコールすると
> > 表示したダイアログを消去できるみたいですが、
>
> > ボタンの無いダイアログを一定期間表示後に消去したい場合はどのようにしたら良いのでしょうか?
>
> > Toastにしてしまった場合、表示時間を指定できないようですので使いづらいです。
>
> > ダイアログの使用例としては、アプリがある処理を行なっている場合に
> > 「処理中です」のようなダイアログを表示し
> > 処理が完了したらコールバックを受け、表示しているダイアログを消去するような場合を想定しています。
>
> > どなたかご存知でしたらご教授をお願いいたします。
>
> --
> ------------------------------------------
> EGAWA Takashi- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

egg

unread,
Jun 17, 2009, 10:46:30 PM6/17/09
to android-g...@googlegroups.com
レイさん

江川です。

> ご教授いただいた内容で消すことができるダイアログは
> ProgressDialog だけなのでしょうか?

dismissメソッドを持っているのはDialogクラスなのでAlertDialogでも一緒ですよ。
Builderでcreateしたときにインスタンスがもらえます。
以下、ボタンを押すとダイアログを表示し、5秒後にダイアログを消すコードの例です。

public class Main extends Activity {
Dialog dialog;
Handler handler = new Handler();
Runnable r = new Runnable() {
public void run() {
dialog.dismiss();
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dialog = new AlertDialog.Builder(Main.this)
.setTitle("Title")
.setMessage("Message")
.setPositiveButton(android.R.string.ok, new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setResult(RESULT_OK);
}
}).create();
((Button) findViewById(R.id.button)).setOnClickListener(new
OnClickListener() {
public void onClick(View v) {
dialog.show();
handler.postDelayed(r, 5000);
}
});
}
}


------------------------------------------
EGAWA Takashi

2009/06/18 10:54 に レイ<beginner...@gmail.com> さんは書きました:

レイ

unread,
Jun 24, 2009, 6:06:04 AM6/24/09
to 日本Androidの会
江川様
おせわになります。レイです。

お礼の返事が遅くなり申し訳ありません。

ご教授頂いた内容で無事にダイアログがタイマーで消せました。

ありがとうございました。
> 2009/06/18 10:54 に レイ<beginner.engi...@gmail.com> さんは書きました:
> >> - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages