2016-06-28 8 views
-1

私はコード内の異なるインスタンスでトースト値を更新しようとしています。トースト値を更新するには?

Toast mToast = Toast.makeText(this,"",Toast.LENGTH_SHORT); 

と私は自分のコード内で必要な時にその値を更新します。 は、私はこのようなオブジェクトをインスタンス化しようとしました。このように:

mToast.setText("Hello!"); 

最初のインスタンス化が自分のコードをクラッシュさせているようです。

これはなぜ起こるのか?

+0

あなたはアプリのクラッシュLogcatへの出力を取得し、完全なスタックトレースを投稿することができますか? –

+0

@AndrewBrooke私はToastがUI要素であり、1つに属する必要があるため、クラッシュが発生していることを知っています。それ自体でインスタンス化することはできません。アレクサンドル・マーティンの解決策が最も簡単かもしれません。私はそれを試してみるつもりです! –

答えて

2

トーストをインスタンス化するときにアプリケーションがクラッシュした場合、コンストラクタ内の間違ったコンテキストが原因である可能性があります。 どこに宣言しますか?あなたの本当のコンテキストを取得してください。

実際にトーストを更新することはできませんが、トーストを非表示にして新しいトーストを作成することはできます。 使用mToast.cancel();あなたのトーストを除去するために、その後、

mToast.setText("New text"); 
mToast.show(); 
1

文字列メッセージを受信して​​表示する関数を作成する必要があります。

public void showToast(String message) { 

    Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 

} 

そして、あなたが好きな場所にそれを呼び出す:表示されながらトーストを更新するには

showToast("My message"); 

EDIT

Toast mToast = Toast.makeText(this, "text", Toast.LENGTH_LONG).show(); 

//... 

mToast.cancel(); 
mToast.setText("Updated text"); 
mToast.show(); 

をそれは私のために働くので、任意のエラーを提供してくださいあなたが持っているメッセージ:)

+0

私の問題は、前のテキストがすでに画面に表示されている場合、テキストを更新しないことです! –

+0

それは後に表示されます。既にキャンセルされているトーストを取り除くには 'cancel()'を呼び出すことができます –

+0

どこで 'キャンセル'を使用しますか?それは関数の最初の行ですか? –

関連する問題