2017-01-20 79 views
11

Używam tego FloatingActionButton.Behavior od wielu miesięcy, dba o ukrywanie i pokazywanie FAB mojej aplikacji. Nigdy nie miałem problemu.Biblioteka projektowania Androida 25.1.0 powoduje, że funkcja FloatingActionButton.Behavior przestanie działać

public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior { 
public ScrollAwareFABBehavior(Context context, AttributeSet attrs) { 
    super(); 
} 

@Override 
public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child, 
            final View directTargetChild, final View target, final int nestedScrollAxes) { 
    // Ensure we react to vertical scrolling 
    return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL 
      || super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes); 
} 

@Override 
public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child, 
          final View target, final int dxConsumed, final int dyConsumed, 
          final int dxUnconsumed, final int dyUnconsumed) { 
    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); 
    if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) { 
     // User scrolled down and the FAB is currently visible -> hide the FAB 
     child.hide(); 
    } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) { 
     // User scrolled up and the FAB is currently not visible -> show the FAB 
     child.show(); 
    } 
}} 

Jak tylko zaktualizować do biblioteki wsparcia

compile 'com.android.support:design:25.1.0' 

FloatingActionButton.Behavior przestanie działać prawidłowo. Ukrywa FAB raz, a następnie nigdy nie jest wywoływany ponownie. Nie jest to metoda onStartNestedScroll ani metoda onNestedScroll.

Czy ktoś wie, co się tutaj dzieje. Reszta mojego kodu pozostaje niezmieniona, ja tylko aktualizuję tę bibliotekę i przestaje działać jak poprzednio.

+0

Pojawiła się nowa wersja kompilacji 'com.android.support:design:25.2.0' a błąd nadal istnieje, tak dalece "Nie aktualizuję tej biblioteki, utknąłem z 25.0.0 – Lancelot

+0

Do tej pory używam rozwiązania z @woxingxiao i działa dobrze z wersją 25.2.0 – Lancelot

Odpowiedz

5

Mam absolutnie ten sam problem, wygląda na to, że jest błąd w "pakiecie wsparcia technicznego". Wierzę, że jedyne, co możemy teraz zrobić, to wycofanie do jednej z poprzednich wersji. Postanowiłem użyć następujących:

compile 'com.android.support:design:25.0.1' 
+0

Używam też tej wersji, ponieważ nie mogłem znaleźć żadnego innego rozwiązania w tym czasie. Myślę, że jest inny sposób robienia tego, ale oznacza zmianę klasy zachowania. – Lancelot

+0

Dzięki. Miałem ten sam problem i spędziłem pół dnia, aby spróbować zrozumieć, co się stało. Czy powinniśmy poinformować Google o tym błędzie? – Valentin

+0

Dzięki! Prawie oszalałem. Nie podjąłem się, dlaczego moje zachowanie FAB nie działa prawidłowo –

34

Dla 25.1.0, CoordinatorLayout jest pomijanie widoki ustawionych GONE przy poszukiwaniu zachowań zadzwonić w swojej metodzie onNestedScroll.
Rozwiązanie zastępuje widoczność FAB GONE z INVISIBLE.
Po prostu zmiana:

child.hide(); 

do:

child.hide(new FloatingActionButton.OnVisibilityChangedListener() { 
     @Override 
     public void onHidden(FloatingActionButton fab) { 
      super.onHidden(fab); 
      fab.setVisibility(View.INVISIBLE); 
     } 
    }); 
+0

Kudos! Zasługujesz na kredytowca. – Chandru

+0

To działa bardzo dobrze. Dzięki – Lancelot

+0

zmarnowałem 2 godziny mojego życia szukając rozwiązania. Dzięki. –