トーストメッセージが表示されていない場合、または表示されているメッセージが送信したいメッセージと同じでない場合、トーストメッセージを表示することです。メッセージがユーザーに表示されているメッセージと同じ場合、メッセージは通過したくありません(無意味なので)。トーストが既存のトーストと異なる場合にのみ表示
この目標に向けて、私はthisの投稿が表示されていない場合にのみトーストを表示する方法を見つけました。
私は両方の要件に合わせてコードを修正しました。
private Toast toast;
public void showAToast (String st, boolean isLong){
try{
toast.getView().isShown();
String text = ((TextView)((LinearLayout)toast.getView()).getChildAt(0)).getText().toString();
if(!text.equalsIgnoreCase(st)){
//New message, show it after
if(isLong){
toast = Toast.makeText(getApplicationContext(), st, Toast.LENGTH_LONG);
} else {
toast = Toast.makeText(getApplicationContext(), st, Toast.LENGTH_SHORT);
}
toast.show();
}
} catch (Exception e) {
//New message
if(isLong){
toast = Toast.makeText(getApplicationContext(), st, Toast.LENGTH_LONG);
} else {
toast = Toast.makeText(getApplicationContext(), st, Toast.LENGTH_SHORT);
}
toast.show();
}
}
私の問題は、最後のトーストメッセージが通過するメッセージと同じであった場合には任意のメッセージが通過しないことです。
これがなぜ発生するのか正確にはわかりませんが、問題の原因を特定するためのデバッグメッセージをメソッドに挿入しました。
トーストメッセージがアプリの生存期間中に送信された場合、toast.getView()。isShown()は例外をスローしません(トーストが表示されないことを意味すると仮定します)。
私の質問は、どうすればこの問題を回避できますか?確かに、この望ましい機能を達成する方法がなければなりません。
トーストされた最新のストリングを追跡できますか?次に、単にequals()で文字列を比較するだけです。 –
Code-Apprenticeあなたはポイントを見逃しています。問題は、文字列が正しく比較されているということではなく、アプリケーションのライフサイクルのどの時点でトーストが送信された場合に、toast.isShown()メソッドが実行されるという問題です。つまり、トーストが画面に表示されていなくても、キャッチブロックコードの代わりにtryブロックコードをすべて実行します(想定されているように)。私はこの問題を回避する方法を求めています。 – NuffsaidM8
OIC ...はい、私は完全に質問を誤解しましたが、あなたが仮定した理由ではない...私の悪い。 –