IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Stopper l'affichage d'un Toast


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 66
    Points : 25
    Points
    25
    Par défaut Stopper l'affichage d'un Toast
    Bonjour à tous,

    J'ai un petit soucis.
    J'aimerais stopper l'affichage d'un Toast, j'ai utilisé la fonction cancel() mais cela fait planter mon application.
    J'ai tenté Toast.cancel() dans le onPause() puis dans le onCreate(), et c'est le même résultat ça plante.

    En fait, j'ai 2 activités, lorsque je clique sur un bouton 1 dans l'activité 1 je trouve des objets, lorsque j'ai réuni suffisamment d'objets un Toast averti l'utilisateur qu'il a débloqué une partie du jeu (un bouton 2 devient alors cliquable), ce bouton 2 ouvre l'activité 2 mais lorsque l'activité 2 s'ouvre je peux encore voir mon Toast apparaître en bas d'écran or j'aimerais que lorsque j'arrive sur cette seconde activité le Toast soit déjà stoppé, voilà pourquoi j'avais mis le cancel() dans le onPause() dans un 1er temps mais ça plante complètement. Pourtant j'ai bien mît un affichage court du toast avec LENGTH_SHORT.

    Quelqu'un aurait une idée ?
    Merci à tous.
    Pikkoro

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Utiliser une snackbar plutôt qu'un toast n'est pas envisageable ? Elle n'a pas le problème de persistance qu'à le toast.

    J'ai tenté Toast.cancel() dans le onPause() puis dans le onCreate(), et c'est le même résultat ça plante.
    Quel est le message d'erreur ? Ca doit être corrigeable non ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 66
    Points : 25
    Points
    25
    Par défaut
    Comment fonctionne un Snackbar je ne connais pas? ça s'affiche comme un Toast?
    J'ai regardé la doc il y a une méthode make(View view, CharSequence text, int duration), donc il faut l'appliquer sur une vue?
    Et je n'ai pas trouvé de méthode pour stopper le Snackbar.

    Il n'y a aucun message d'erreur dans le Monitor Android ou le Logcat, juste dès que le Toast s'affiche et que je clique sur le bouton débloqué l'application cesse de fonctionner et se ferme. ça fait ça que je mette le cancel() dans le onPause() ou dans le onCreate() que je mets dans le onClick() du bouton débloqué.
    Il faut peut être mettre un argument à la méthode cancel() ?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 66
    Points : 25
    Points
    25
    Par défaut
    Je viens de tester une nouvelle solution, ça ne plante plus mais ça ne fait rien, c'est à dire que le Toast reste affiché même dès que j'arrive sur l'activité suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    public class JouerActivity extends Activity implements View.OnClickListener, LocationListener {
     
    Toast toastBouton2;
     
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_jouer);
            toastBouton2 = new Toast(this); // Avant je ne déclaré pas une new Toast mais je viens de l'essayer
            button1 = (Button)findViewById(R.id.button1); // Bouton 1
            button1.setOnClickListener(this); // Bouton 1
     
            button2 = (Button) findViewById(R.id.button2); // Bouton 2
            button2.setEnabled(false); // Bouton 2
            button2.setOnClickListener(new View.OnClickListener() { // Clic sur le bouton 2
                @Override
                public void onClick(View v) { // Lors du clic sur le bouton 2 je veux passer à l'activité 2 et stopper l'affichage du Toast sur la 2ème mais je n'y arrive pas
                    Intent intentB2 = new Intent(JouerActivity.this, Activity2.class);
                    startActivity(intentB2);
                    // stopToastBouton2(); // Méthode créé plus bas mais qui plante aussi, je le laisse en commentaire pour voir ce que j'ai fait et qui marche pas
                    toastBouton2.cancel(); // Pour stopper l'affichage du toast mais ça plante
                    }
                }
            });
        }
     
    public void onClick(View v) {
            switch (v.getId()) {
                case R.id.positionCarte: // Autres boutons que je n'ai pas mit dans cet exemple
                    position(v);
                    break;
                case R.id.positionAdresse:
                    afficherAdresse();
                    break;
                case R.id.button1: // Clic sur le bouton 1
                    addB();
                    break;
                default:
                    break;
            }
        }
     
    public void addB() { // Fonction appelée par le bouton 1
            invoquerA();
            invoquerD();
        }
     
    public void invoquerD() {
            if((nbOne>0) && (nbTwo>0) {
                toastBouton2.makeText(this, "Vous pouvez invoquer ...", Toast.LENGTH_SHORT).show();
                button2.setEnabled(true); // Le bouton 2 devient cliquable et donc le Toast apparaît pour alerter l'utilisateur
            }
        }
     
    @Override
        protected void onPause() {
            super.onPause();
            // toastBouton2.cancel(); // Dans le onPause ça plante aussi
        }
     
        public void stopToastBouton2() {
            toastBouton2.cancel(); // ça plante
        }
    }
    Il y a encore du code mais c'est inutile de le mettre car ça ne concerne pas le Toast ça sera trop long sinon

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Un exemple complet sur la snackbar : http://www.androidhive.info/2015/09/...ckbar-example/
    Il faut un coordinatorlayout , donc une interface material design récente. Si ton application est en cours de dév ca devrait être le cas.

    Une appli qui plante sans trace ce n'est pas possible.
    Ton logcat est bien sur le bon appreil et la bonne application ? Ton appareil est bien branché ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Essayes de respecter cette structure globale pour voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class MainActivity extends Activity {
        private Toast toast = null;
     
        @SuppressLint("ShowToast")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ...
            toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG);
            ...  
     
        }
     
       public void methodePourLeClic() {
            toast.setText("Vous pouvez invoquer ...");
            toast.show();
       }
     
        @Override
        protected void onStop () {
            super.onStop();
            toast.cancel();
        }
     
    }
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 66
    Points : 25
    Points
    25
    Par défaut
    Salut Hephaistos007,

    J'ai bien l'impression que ta solution fonctionne, il faut que je teste ça davantage mais au premier abord ça marche bien.
    Merci beaucoup à toi et aussi Grunk pour ses conseils.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'affichage d'un toast
    Par narutoe dans le forum Android
    Réponses: 2
    Dernier message: 09/01/2012, 08h01
  2. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  3. Affichage de documents PDF
    Par Dajon dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/10/2002, 11h36
  4. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo