2016-05-14 11 views
7

genannt wird. Ich benutze eine Snackbar, um die Benutzer meiner App zu benachrichtigen, dass sie nicht mit dem Internet verbunden sind. Ich habe eine "Wiederholungs" -Aktion zur Snackbar hinzugefügt, die die Verbindung erneut überprüft. Ich möchte, dass die Snackbar angezeigt wird, bis ich sie selbst ablehne (wenn eine Internetverbindung gefunden wird), aber ich kann das nicht zur Arbeit bringen. Immer wenn ich auf die Aktion klicke, wird die Snackbar ausgeblendet.So halten Sie die Snackbar offen, nachdem die Aktion

Ich habe die Dauer auf unbestimmte Zeit eingestellt und die Snackbar bleibt auf unbestimmte Zeit geöffnet, aber sie wird ausgeblendet, wenn ich auf die Aktion klicke.

Ich habe online gelesen, dass das Ablehnen der Snackbar automatisch nach dem Klicken auf die Aktion nicht immer das Standardverhalten war.

edit:

Ich fühle mich wie meine Frage schlecht formuliert werden könnten. Ich habe eine Snackbar mit einer Aktion, aber ich möchte nicht, dass die Snackbar geschlossen wird, wenn die Aktion ausgeführt wird, was automatisch automatisch geschieht.

+2

Warum nicht einfach einen neuen snackbar erstellen, wenn der Benutzer tippt „Wiederholen“ ? Meiner Meinung nach könnte es sogar gut sein, eine Sekunde zu warten, bevor die neue Snackbar als visuelle Rückmeldung angezeigt wird, die dem Benutzer sagt, dass "Ja, ich habe es versucht, aber es gibt immer noch keine Internetverbindung". (Das soll nicht heißen, dass es keine Möglichkeit gibt, das zu tun, was Sie wollen) – tjollans

+0

Also wollen Sie Schlange zeigen, bis der Benutzer sie manuell ablehnt. Recht? –

+0

Nun, der Benutzer kann es durch Streichen entlassen, mit dem ich kein Problem habe. Ich möchte nur nicht, dass es automatisch geschlossen wird, wenn sie auf die Aktion klicken. – DeryckeS

Antwort

1

Sie können den OnClickListener-Satz für die Schaltfläche überschreiben. Erstens machen die snackbar mit und stellen Sie die Aktion mit einigen Dummy-Hörer

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

Und dann auf die Schaltfläche finden und stellen Sie Ihre 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

Um das hinzuzufügen, anstatt einfach über die ViewGroup zu iterieren, können Sie 'findViewById' verwenden. d. h. 'Button actionButton = (Schaltfläche) snackbar.getView(). findViewById (android.support.design.R.id.snackbar_action);' – RocketSpock

Verwandte Themen