2016-05-14 9 views
7

Io uso uno snackbar per notificare agli utenti della mia app che non sono connessi a Internet. Ho aggiunto un'azione "riprova" allo snackbar che ricontrolla la connessione. Voglio che la barra degli snack rimanga visualizzata fino a quando non la congedo da sola (quando viene trovata una connessione Internet), ma non riesco a farlo funzionare. Ogni volta che clicco sull'azione, lo snackbar si chiude.Come mantenere aperto lo snackbar dopo l'azione si chiama

Ho impostato la durata a indefinita e la barra di snack rimane aperta a tempo indeterminato ma viene chiusa quando faccio clic sull'azione.

Ho letto in linea che chiudere automaticamente la barra degli snack dopo aver fatto clic sull'azione non è sempre stato il comportamento predefinito.

edit:

Mi sento come se la mia domanda potrebbe essere mal formulata. Ho uno snack bar con un'azione ma non voglio che lo snackbar si chiuda quando l'azione è eseguita, cosa che fa automaticamente atm.

+2

Perché non solo creare un nuovo snack quando l'utente tocca "riprovare" ? IMHO potrebbe anche essere bello aspettare un secondo prima di visualizzare il nuovo snackbar come feedback visivo che dice all'utente che "sì, ho provato, ma non c'è ancora alcuna connessione a Internet". (Questo non vuol dire che non c'è modo di fare quello che vuoi) – tjollans

+0

Quindi vuoi mostrare la barra del serpente fino a quando l'utente non la congeda manualmente. destra? –

+0

Bene, l'utente può eliminarlo scorrendo, che non ho un problema con. Non voglio che si chiuda automaticamente quando fa clic sull'azione – DeryckeS

risposta

1

È possibile sovrascrivere il set OnClickListener per il pulsante. In primo luogo fare lo snack bar con e impostare l'azione con qualche ascoltatore manichino

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

e poi trovare il pulsante e impostare il 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

Per aggiungere a questo, anziché iterare sul ViewGroup puoi semplicemente usare 'findViewById'. Ad esempio: Button actionButton = (Button) snackbar.getView(). findViewById (android.support.design.R.id.snackbar_action); ' – RocketSpock