ユーザーがReactNativeViewのコンテンツをスクロールするときに、ActionBarとFloatingActionButtonをネイティブで非表示にしようとしています。直感的に、これはJSからネイティブへのコールバックを使用して行う必要があります。しかし、documentationは、 "ネイティブモジュールはそのコールバックを1回だけ呼び出すはずです"と述べています。これは、スクロールコールバックの一貫したストリームを監視できる必要があるため、私のユースケースには適していません。NoClassDefFoundError ReactネイティブAndroidのReactScrollViewメソッドを参照するとき
これを回避するために、ReactNativeViewにGlobalLayoutListenerを設定し、ReactScreenViewがReactScrollViewに注入されたことを確認したときにOnScrollChangeListenerを設定しました。これはAPI 22で完全に機能します。ただし、API 21では、OnScrollChangeListenerを設定しようとする時点でNoClassDefFoundErrorがスローされます。スタックトレースの上には、 'ScrollAnimatorクラスのリンクに失敗しました'と '仮想メソッドScrollView.setOnScrollChangeListenerを解決できませんでした。'という2つのエラーがあります。
NoClassDefFoundErrorは、コンパイル時に存在するライブラリから発生しますが、実行時には発生しないことを理解しています。これは、同じライブラリの2つの異なるバージョンへの参照を持つことによってしばしば引き起こされるプロジェクト構成上の問題です。この人気のあるStackOverflow questionでは、NoClassDefFoundErrorに関する詳細を読むことができます。
私は、API 22でうまく動作するため、このようなプロジェクト構成の問題はないと確信しています。そこで、ここでは何が起こっていますか?さらに、この問題を正しい方法で解決しようとしていますか?または、JSからネイティブにスクロール変更イベントを発行するには、より良い方法がありますか?