« Android sdcardディレクトリの取得 | メイン | Android Nine Patch(9-patch)フォーマットとは »

Android Toastが固まるのを回避する方法

Androidには、Toastという機能がある。これは簡単なメッセージをユーザーに表示するだけの機能である。ユーザが見逃す可能性もあるので、重要なメッセージの表示には使用できないが、Nofificationとの併用や、何かを削除した時に削除終了をユーザに明確に伝える時に使用する。

android.widget.Toast

表示する時間は、長く表示と、短く表示が用意されている。 Androidのソースコードを見ていると、ほとんどのアプリケーションが、LENGTH_SHORTを使用しているが、個人的に読み取れない事が多いので、LENGTH_LONGを使用している。

  • LENGTH_LONG
  • LENGTH_SHORT (Default)

使い方は、非常に簡単で、以下の1行で画面に表示をさせる事ができるため、通常のメッセージ表示のほかに、Broadcastのテスト等に使用すると便利である。


Toast.makeText(this, R.string.short_notification_text,
                    Toast.LENGTH_SHORT).show();

Toastが固まる時

SDKを見てもらうと、Toast.cancel()が存在する。ほっておけばすぐに消えてしまうToastにわざわざこのようなメソッドが腰囲されている理由は、Toastを表示している間にもう一度Toastを表示してはいけないということである。

マルチスレッド化したプログラムで各スレッドから、画面に報告用のToastを表示すると、タイミングによっては、Toastを2回呼んでしまう可能性がある。
このような時は、以下のようなToastMasterクラスを作成して使用すれば良い


public class ToastMaster extends Toast{
	private static Toast sToast = null;

    public ToastMaster(Context context) {
		super(context);
	}
    
    @Override
    public void show() {
    	ToastMaster.setToast(this);
    	super.show();
    }
    public static void setToast(Toast toast) {
        if (sToast != null)
            sToast.cancel();
        sToast = toast;
    }

    public static void cancelToast() {
        if (sToast != null)
            sToast.cancel();
        sToast = null;
    }
}

使用する時


ToastMaster.makeText(this, text, ToastMaster.LENGTH_SHORT).show();

このソースは、Androidのソースコードにあった物を切りだしたものです。

トラックバック

このエントリーのトラックバックURL:
http://www.taosoftware.co.jp/mt/mt-tb.cgi/178

コメント

Androidには、Toastという~
の文章の三行目、「nofificationとの併用や~」とありますが、
これは「notification」のことですか?

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)