Donc mon but est de n'avoir qu'un message toast affiché à l'utilisateur s'il n'y a pas de message toast ou si le message affiché n'est PAS le même que le message que je veux envoyer . Si le message est le même que celui qui est montré à l'utilisateur, je ne veux pas que le message passe (parce que c'est inutile).Montrer le toast seulement s'il est différent du toast existant
Pour travailler vers cet objectif, j'ai trouvé this sur la façon de montrer seulement un toast si aucun n'est montré.
J'ai modifié le code pour répondre aux deux exigences.
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();
}
}
Mon problème est que tout message ne passera pas par si le dernier message de pain grillé était le même que le message qui veut passer.
Je ne sais pas exactement pourquoi cela se produit, mais j'ai mis quelques messages de débogage dans la méthode pour déterminer quel était le problème.
Les messages indiquent que toast.getView(). IsShown() ne lance pas l'exception (supposons qu'aucun pain grillé ne s'affiche) si un message toast a été envoyé pendant la durée de vie de l'application.
Donc, ma question est, comment puis-je contourner ce problème? Sûrement il doit y avoir un moyen d'atteindre cette fonctionnalité souhaitée.
Pouvez-vous garder une trace de la dernière corde qui a été grillée? Ensuite, vous pouvez simplement faire une simple comparaison de chaînes avec 'equals()'. –
Code-Apprentice Vous avez manqué le point. Le problème n'est pas que les chaînes sont comparées de manière incorrecte, le problème est que la méthode toast.isShown() est en cours d'exécution si le toast a été envoyé à tout moment dans le cycle de vie de l'application. Cela signifie que, même si aucun toast n'est sur l'écran, il traverse tout le code du bloc try au lieu du code du bloc catch (comme c'est supposé le faire). Je demande un moyen de contourner ce problème pour obtenir l'effet désiré. – NuffsaidM8
OIC ... oui, j'ai mal compris la question entièrement, mais pas pour les raisons que vous avez supposé ... mon mauvais. –