2016-05-14 12 views
7

Używam paska z przekąskami, aby powiadomić użytkowników mojej aplikacji, że nie mają połączenia z internetem. Dodałem akcję "ponów" do paska kontrolnego, który ponownie sprawdza połączenie. Chcę, aby pasek z przekąskami pozostawał wyświetlany, dopóki sam go nie odrzuci (gdy zostanie znalezione połączenie internetowe), ale nie mogę go uruchomić. Ilekroć klikam akcję, snackbar odpada.Jak zachować otwarty pasek po akcji nazywa się

Ustawiłem czas trwania na nieokreślony, a snackbar pozostaje otwarty przez czas nieokreślony, ale odrzuca po kliknięciu akcji.

Przeczytałem w Internecie, że automatyczne zamykanie paska adresu po kliknięciu w akcję nie zawsze było domyślnym zachowaniem.

edit:

czuję jak moje pytanie może być źle sformułowane. Mam pasek nawigacyjny z akcją, ale nie chcę, aby pasek zamykający był zamykany podczas wykonywania akcji, która automatycznie wykonuje atm.

+2

Dlaczego nie wystarczy utworzyć nowy Snackbar gdy użytkownik kliknie „ponownie” ? IMHO może nawet dobrze poczekać sekundę przed wyświetleniem nowego paska z przekąskami jako wizualną informacją zwrotną informującą użytkownika, że ​​"tak, ponowiłem próbę, ale nadal nie ma połączenia z internetem". (To nie znaczy, że nie ma sposobu robienia tego, co chcesz) – tjollans

+0

A więc chcesz pokazać pasek węża, dopóki użytkownik nie odrzuci go ręcznie. dobrze? –

+0

Cóż, użytkownik może go zamknąć, przesuwając, z czym nie mam problemu. Po prostu nie chcę, aby zamknęła się automatycznie, gdy klikną na akcję – DeryckeS

Odpowiedz

1

Można zastąpić zestaw OnClickListener dla przycisku. Najpierw upewnij bistrem z i ustawić akcję z jakiegoś manekina słuchacza

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

a następnie znaleźć przycisku i ustawić 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

Aby dodać do tego, zamiast iterować nad ViewGroup można po prostu użyć 'findViewById'. tj. Button buttonButton = (Button) snackbar.getView(). findViewById (android.support.design.R.id.snackbar_action); ' – RocketSpock

Powiązane problemy