2016-05-14 1 views
7

J'utilise un snack-bar pour informer les utilisateurs de mon application qui ne sont pas connectés à Internet. J'ai ajouté une action «réessayer» au casse-croûte qui re-vérifie la connexion. Je veux que le snack-bar de rester affichée jusqu'à ce que je rejette moi-même (lorsqu'une connexion Internet se trouve), mais je ne peux pas obtenir ce travail. Chaque fois que je clique sur l'action, le snack-bar rejette.Comment garder le snack-bar ouvert après l'action est appelée

Je me suis fixé la durée à durée indéterminée et le snack ne reste ouverte indéfiniment, mais il rejette quand je clique sur l'action.

J'ai lu en ligne qui a rejeté l'automatiquement après avoir cliqué sur snackbar sur l'action n'a pas toujours été le comportement par défaut.

modifier:

Je me sens comme ma question pourrait être mal formulée. J'ai un snack avec une action mais je ne veux pas que le snack se ferme lorsque l'action est exécutée, ce qu'il fait automatiquement.

+2

Pourquoi ne pas simplement créer un nouveau snack-bar lorsque l'utilisateur tape « Retry » ? À mon humble avis, il pourrait même être bon d'attendre une seconde avant d'afficher le nouveau snack-bar en tant que rétroaction visuelle indiquant à l'utilisateur que "oui, j'ai réessayé, mais il n'y a toujours pas de connexion Internet". (Cela ne veut pas dire qu'il n'y a aucun moyen de faire ce que vous voulez) – tjollans

+0

Alors voulez-vous montrer la barre de serpent jusqu'à ce que l'utilisateur le rejette manuellement. droite? –

+0

Eh bien, l'utilisateur peut le rejeter en balayant, ce qui ne me pose aucun problème. Je ne veux pas fermer automatiquement quand ils cliquent sur l'action – DeryckeS

Répondre

1

Vous pouvez remplacer l'ensemble OnClickListener pour le bouton. d'abord faire le snack-bar avec et mis l'action avec une écoute factice

Snackbar snackbar = Snackbar.make(view,"TXT",Snackbar.LENGTH_LONG).setAction("OK", new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { } 
    }); 

Et puis trouver le bouton et définissez votre listner

snackbar.show(); 
ViewGroup group = (ViewGroup) snackbar.getView(); 
for(int i=0; i< group.getChildCount();i++){ 
     View v = group.getChildAt(i); 
     if(v instanceof Button){ 
      v.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        YOUR_ACTION(); 
       } 
      }); 
     } 
} 
+0

Pour ajouter à cela, au lieu d'itérer sur ViewGroup, vous pouvez simplement utiliser 'findViewById'. c'est-à-dire Button actionButton = (bouton) snackbar.getView(). findViewById (android.support.design.R.id.snackbar_action); ' – RocketSpock