9
votes

Android annuler Toast lors de la sortie de l'application et quand on est montré

J'ai lu sur ce genre de problème ici, mais les réponses ne semblent pas fonctionner.

i montrer un toast lorsque l'utilisateur clique sur un bouton. Lorsque l'utilisateur clique continuellement sur le bouton, le toast continue d'être affiché à nouveau et encore même lorsque l'utilisateur quitte l'activité.

La longueur du toast est courte. La longueur du pain grillé ne peut pas être modifiée car le texte est long.

C'est ce que j'ai essayé dès maintenant: xxx

Cela n'a pas fonctionné.

J'ai essayé: xxx

dans le OnStop () . Pour une raison quelconque, la méthode d'annulation ne fonctionne jamais.

Si je mets le .Cancel () Avant d'afficher l'application ... alors il y aurait un autre chèque NULL pour cela. Mais après cela, cela ne fonctionnait pas aussi. Je peux montrer une boîte de dialogue au lieu d'un pain grillé mais ce ne serait pas une solution.

existe-t-il un moyen de vérifier si un toast est affiché ou non?

pour référence < / p>


4 commentaires

Onstop () Utilisez plutôt une pause () ....


Je suis confus à propos de ce concept. Onpause s'appelle avant Ontop. Mais lorsque l'activité change, elle s'appelle. Comment sont-ils différents et pour lesquels sont-ils utilisés? J'utilise l'Ontop pour arrêter tous les fils et boîtes de dialogue Async


Après un clic, faites le bouton invisible


Y a-t-il un moyen de vérifier si un toast est affiché ou non?


4 Réponses :


1
votes

Vous pouvez annuler des toasts individuels en appelant Annuler () sur l'objet Toast. AFAIK, il n'y a aucun moyen pour vous d'annuler tous les toasts exceptionnels, cependant.


2 commentaires

Y a-t-il un moyen de vérifier si un toast est affiché ou non?


Cette réponse a exactement le même libellé que la réponse de Belware à cette question en double: Stackoverflow.com/Questtions/2755277/...



1
votes

Essayez de garder l'horodatage du dernier toast et n'autorisez pas de nouveaux toasts jusqu'à ce qu'une période de délai d'expiration soit écoulée.

Quelque chose comme: xxx

Je voudrais 't vous soucier d'un seul toast coller autour d'une seconde après la sortie de l'utilisateur - il s'agit d'un comportement assez standard.


2 commentaires

Y a-t-il un moyen de vérifier si un toast est affiché ou non?


C'est la seule méthode qui fonctionne pour moi. CECI EST LE CHEMIN!



4
votes

au lieu d'annuler le toast. changer le texte. Par exemple xxx pré>

Lorsque vous avez besoin d'un toast différent, utilisez P>

        t.setText("bye");
        t.show();


2 commentaires

Y a-t-il un moyen de vérifier si un toast est affiché ou non?


@Ciff Voir ceci .. Stackoverflow.com/Questions/ 5295765 / Toast-Numéro-in-android / ...



17
votes

Le truc est de garder une trace du dernier toast qui a été montré et d'annuler celui-ci.

Ce que j'ai fait est de créer un toast wrapper , qui contient une référence statique au dernier toast affichée.

Lorsque j'ai besoin de montrer une nouvelle, je annule d'abord la référence statique, avant de l'afficher le nouveau (et sauvez-le dans la statique). < / p>

Voici le code complet du BAST wrapper i Fabriqué - il imite assez des méthodes de toast pour que je puisse l'utiliser. Par défaut, le vanter annulera le précédent, de sorte que vous n'accumulez pas une file d'attente de toasts en attente d'être affichée.

Ce code peut être trouvé dans mon gist githanub:

  • Mobiric / Groet

    Si vous voulez simplement savoir comment annuler les notifications lors de la sortie de votre application, vous trouverez beaucoup d'aide là-bas. Si vous avez des améliorations ou des suggestions, n'hésitez pas à la fourche et à vous contacter. C'est une très ancienne réponse, mais le code a été stable dans la production sur quelques applications depuis un certain temps.

    BTW - Cela devrait être un remplacement de gaspillage direct pour toast dans la plupart des cas d'utilisation.


    xxx

8 commentaires

merci. Il doit y avoir une autre alternative à annuler un toast. Si nous pouvions simplement connaître l'identification, le toast est affiché ...


@Ciff, il pourrait y avoir - mais vous essayez de faire référence à un nouvel objet, c'est pourquoi cela ne fonctionne pas. Ce code est One Way Pour faire ce que vous devez faire - Conservez une référence au toast Vous essayez d'annuler et appelez toast.cancel () < / code> dessus.


@Ciff en regardant le code source Android, vous pouvez essayer d'appeler toast.geview () - mais vous avez toujours besoin d'une référence à cet objet, c'est-à-dire que vous devez garder une trace du dernier toast que vous avez affiché. En regardant le code source pourrait vous aider beaucoup dans ce cas, car c'est un code assez simple - il montre également que beaucoup de fonctionnalités de toast sont traitées par le système lui-même et ne sont pas accessibles par nous.


@Ciff m'a manqué que vous appeliez déjà toast.geview () mais vous l'appelez sur le mauvais objet .


Ne serait-il pas plus court et / ou plus agréable à sous-classement toast ?


Peut-être que ce serait? ymmv


Je suis également arrivé avec une solution similaire. Et le précédent toast est annulé en effet. Mais voici quelques problèmes: 1) Lorsque vous essayez de toucher un bouton vraiment rapide, il semble que le système ne soit pas capable d'annuler toast immédiatement - ils sont toujours en cours de file d'attente; 2) Dans mon cas, j'ai utilisé toast avec vue personnalisée et l'enregistrement dans un Var STATIC crée une fuite de mémoire, pour résoudre ce problème, j'ai créé une activité de base avec le champ privé Toast .


Ne travaillez pas, j'ai trois toast à l'écran et tous montré l'un après l'autre. Cependant, il annule le précédent mais on a l'impression que tout pain grillé a été spectacle.