2013-09-07 16 views
6

Androidでは、Toastを作成して表示すると、連続して表示されます。問題は、いくつかのフィールドをチェックするボタンがあり、ユーザーが間違ったデータを入力するとトーストが表示されることです。ユーザーがボタンを繰り返しタッチすると、トーストが蓄積され、メッセージは数秒間消えません。Androidでトーストの蓄積を避ける最善の方法

これを避ける最も良い方法はどれですか?

  • 最後のトーストへの参照を保存し、新しいトーストを作成する前に削除することができますか?
  • すべてのメッセージに同じトーストを使用する必要がありますか?
  • 新しいトーストを作成して表示する前に、すべてのアプリケーショントーストをクリアする方法を使用できますか?
+0

私は同じ問題を抱えています。私はあなたに仕事をしていないアイデアをいくつか共有しています。トーストファイナルを使用していて、カウンターを使っています。 –

+2

ホラ(こんにちは)Didac、あなたは[これを試してみましたか(http://stackoverflow.com/questions/12922516/how-to-prevent-multiple-toast-overlaps)または[その](http://stackoverflow.com/questions/6496725/showing-multiple-to-at-the-time-problem)? – AlexBcn

+0

最高の方法はトーストを使用しないことです。 :) might – kcoppock

答えて

25

Toastcancel()メソッドを使用して、表示トーストを閉じることができます。

変数を使用して、すべてのトーストを表示する際に参照を保持し、もう1つ表示する前にcancel()と呼んでください。

private Toast mToast = null; // <-- keep this in your Activity or even in a custom Application class 

//... show one Toast 
if (mToast != null) mToast.cancel(); 
mToast = Toast.makeText(context, text, duration); 
mToast.show(); 

//... show another Toast 
if (mToast != null) mToast.cancel(); 
mToast = Toast.makeText(context, text, duration); 
mToast.show(); 

// and so on. 

あなたも、そうのような小さなクラスにそれを包むことができます:

public class SingleToast { 

    private static Toast mToast; 

    public static void show(Context context, String text, int duration) { 
     if (mToast != null) mToast.cancel(); 
     mToast = Toast.makeText(context, text, duration); 
     mToast.show(); 
    } 
} 

などのように、あなたのコードでそれを使用します。

SingleToast.show(this, "Hello World", Toast.LENGTH_LONG); 

//

+1

'SingleToast'ソリューションは動作しますが、メモリに問題があります。それは、 'context'の生存期間を超える可能性のある' mToast'の存続期間の間、 'context'を保持します。代わりに 'context.getApplicationContext()'を使用してメモリリークを回避する必要があります。 –

1

だけ持っているのこのアクティビティで1つのトースト。

private Toast toast = null; 

次に、もう1つを作成する前に、Toastが表示されているかどうかを確認してください。

if (toast == null || !toast.getView().isShown()) { 
    if (toast != null) { 
     toast.cancel(); 
    } 
    toast = Toast.makeToast("Your text", Toast.LENGTH).show(); 
} 

あなたも、あなたが別のテキストメッセージを表示する必要がある場合は、コードをリファクタリングするプライベートメソッドshowToast(text)にその最後のスニペットを作ることができます。

関連する問題