Question

J'ai développé une application Android et je suis face à un problème avec Toast. Supposons que je suis un Toast Affichage, il est affiché sur la fenêtre de l'application. Lorsqu'une boîte de dialogue apparaît est, le pain grillé ne disparaît pas instantanément.

Je veux savoir comment je peux annuler le pain grillé.

Était-ce utile?

La solution

Toast.makeText retourne un objet Toast. Appel cancel() sur cet objet pour l'annuler.

Autres conseils

La durée la plus courte, vous pouvez spécifier pour le toast est Toast.LENGTH_SHORT qui a une valeur de 0 mais est en fait 2000 milliseconds long. Si vous voulez plus courte que cela, essayez ceci:

    final Toast toast = Toast.makeText(ctx, "This message will disappear in 1 second", Toast.LENGTH_SHORT);
    toast.show();

    Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
           @Override
           public void run() {
               toast.cancel(); 
           }
    }, 1000); //specify delay here that is shorter than Toast.LENGTH_SHORT

Je pense qu'il n'y a pas besoin de créer un toast personnalisé.

Créer seule instance unique de la classe Toast. Nous avons mis tout le texte du pain grillé à l'aide toast.setText("string") et méthode toast.cancel() d'appel de méthode onDestroy().

extrait de code de travail comme suit:

package co.toast;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class ShowToastActivity extends Activity {
    private Toast toast = null;
    Button btnShowToast;

    @SuppressLint("ShowToast")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // creates only one toast object..
        toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG);

        btnShowToast = (Button) findViewById(R.id.btnShowToast);

        btnShowToast.setOnClickListener(new OnClickListener() {

             @Override
             public void onClick(View v) {

                // only set text to toast object..
                toast.setText("My toast!");
                toast.show();
            }
        });
    }

    @Override
    protected void onDestroy() 
    {
        toast.cancel();
        super.onDestroy();
    }

    @Override
    protected void onStop () {
        super.onStop();
        toast.cancel();
    }
}

Espérons que cela est utile pour vous ..

Utilisation annuler procédé de tost: toast.cancel ();

Ceci est un exemple de base en utilisant la méthode de cancel() d'un Toast.

Toast mytoast;
mytoast = Toast.makeText(getApplicationContext(), "Hi Ho Jorgesys! ", Toast.LENGTH_LONG);
mytoast.show();
....
....
....
if(CancelToast){
  mytoast.cancel();
}
Toast toast;

private void showToast(String text) {
    if (toast!=null)
        toast.cancel();
    toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
    toast.show();
}

Ok, moi aussi je suis en train d'annuler un Toast, et ne peut pas sembler obtenir l'annulation () pour obtenir invoqué soit dans le Activity.onDestroy () ou Activity.onStop (), etc. Après une lecture API-doc et googler d'autres ont besoin d'aide pour Toasts à être annulé, Je pense que je ne suis toujours pas clair quand les activités se font arrêter, mis en pause, détruit. Je besoin d'un moyen infaillible pour forcer mon activité pour obtenir pause ou arrêté.

Dans mon cas spécifique, car il y a seulement court et à long Toasts durée, j'ai décidé d'itérer une boucle 5 fois faire un spectacle () d'un toast longue durée, il resterait à l'écran pendant 15-20 secondes. Cela fonctionne très bien!

Mais, l'inconvénient (côté à effet négatif) en utilisant un objet Toast est qu'ils persistent même après que l'utilisateur abandonne votre application et retourne à la maison à l'écran et commence à utiliser une autre application ... votre pain grillé est va vivre pour les 15-20 prochaines secondes, à moins que vous peut garantir que vous pouvez trouver un endroit (une manière) à invocation Annulation (). En outre, vous devez croire que la volonté Android honorer votre appel à annuler ()

Donc, à cette fin, j'ai été peaufinage ma simple boucle, en essayant de Invoke annule dans la boucle à droite, et me prouver ce sera honorer un appel cancel et visuellement se comportent comme prévu.

Extrait de code: Note: « toasts » est une variable publique INSTANCE, donc nous ont une seule instance du Toast-objet [tout comme recommandé ci-dessus, et qui a confirmé un commentateur travaillait il y a deux ans, dans l'activité onStop () et OnDestroy ()]

toast = Toast.makeText(ctxt, result, Toast.LENGTH_LONG);
    for (int i=0; i < 5; i++)
    {
        // Long-toasts each last about 3.5 secs
        toast.show();

        android.os.SystemClock.sleep(1500);
        toast.cancel();
        android.os.SystemClock.sleep(1500);
        toast = Toast.makeText(ctxt, result, Toast.LENGTH_LONG);
    }

Ok, la boucle originale contenait cette seule ligne faire le spectacle. Cela fonctionne, par lui-même.

Mais à l'expérience, j'ai ajouté ces quatre lignes, dormir environ à mi-chemin à travers le 3,5 secondes montrant, puis l'annuler, encore une fois le sommeil pour une seconde et demie, puis re-créer et afficher le nouveau Toast.

Je me attendais à voir le pain grillé pendant environ 1,5 secondes, voir ensuite disparaître, et de revenir dans un autre 1,5 secondes, etc.

Devinez quoi ... le pain grillé ne semble jamais tout!

Ok, je suis mumble mode ... tout ce que je manque, dans comprendre les mystères intérieurs-de la façon dont la classe Toast est mis en œuvre et est censé se comporter?

Et, à ma première question: Comment mieux pour obtenir ma Activité pour aller dans un état interrompu ou arrêté?

[Note: Je READ ce forum beaucoup ... c'est génial !!! Ceci est mon premier poste au milieu d'un fil de discussion ... Désolé que ma réponse est se trouve en position comme une réponse, plutôt que comme une question relative au sujet de ce fil. ]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top