2016-05-19 6 views
1

Ich versuche, die ActionBar und FloatingActionButton in native ausblenden, wenn der Benutzer den Inhalt einer ReactNativeView scrollt. Intuitiv sollte dies mit einem Rückruf von JS zurück zu nativ erfolgen. Die documentation gibt jedoch an, dass "ein systemeigenes Modul seinen Rückruf nur einmal aufrufen soll". Dies ist für meinen Anwendungsfall ungeeignet, da ich in der Lage sein muss, einen konsistenten Strom von Scroll-Callbacks zu überwachen.NoClassDefFoundError beim Verweisen ReactScrollView-Methode in React Native Android

Um dies zu umgehen, richtete ich einen GlobalLayoutListener auf der ReactNativeView und legen Sie meine OnScrollChangeListener, wenn ich beobachtet, dass React Native die ReactScrollView injiziert. Dies funktioniert perfekt auf API 22. Jedoch wirft es in API 21 einen NoClassDefFoundError an dem Punkt, an dem ich versuche, den OnScrollChangeListener zu setzen. Es gibt ein paar Fehler oberhalb des Stack-Trace: "Link der Klasse ScrollAnimator ist fehlgeschlagen" und "Die virtuelle Methode ScrollView.setOnScrollChangeListener konnte nicht aufgelöst werden."

Ich verstehe, die NoClassDefFoundError stammt aus der Bibliothek zur Kompilierzeit vorhanden, aber nicht zur Laufzeit. Dies ist ein Projektkonfigurationsproblem, das häufig durch Verweise auf zwei verschiedene Versionen derselben Bibliothek verursacht wird. Mehr kann über NoClassDefFoundError in diesem populären StackOverflow question gelesen werden.

Ich bin ziemlich sicher, dass ich nicht so ein Projekt Konfigurationsproblem habe, weil es auf API 22 gut funktioniert. Also, was ist hier los? Fange ich an, dieses Problem auf die richtige Art und Weise zu lösen? Oder gibt es eine bessere Möglichkeit, Scroll-Änderungsereignisse von JS an native zu senden?

Antwort

0

Die View.OnScrollChangeListener wird in API-Ebene hinzugefügt 23. Eine Arbeit um

mScrollView.getViewTreeObserver().addOnScrollChangedListener(listenerInstance); 

Die oben genannten Callback-Hörer wird nicht viel nützlich zu verwenden wäre, wenn Sie versuchen, X, Y-Werte zu erhalten.