在React Native Android中引用ReactScrollView方法时出现NoClassDefFoundError

时间:2016-05-19 22:44:15

标签: android react-native

当用户滚动ReactNativeView的内容时,我试图隐藏ActionBar和FloatingActionButton。直观地说,这应该通过从JS回到本机的回调来完成。但是,documentation状态"本机模块应该只调用一次它的回调。"这不适合我的用例,因为我需要能够监视一致的滚动回调流。

为了解决这个问题,我在ReactNativeView上设置了一个GlobalLayoutListener,并在我观察到React Native注入了ReactScrollView时设置了我的OnScrollChangeListener。这在API 22上非常有效。但是,在API 21上,它会在我尝试设置OnScrollChangeListener时抛出NoClassDefFoundError。堆栈跟踪上方有几个错误:'类ScrollAnimator的链接失败'和'无法解析虚拟方法ScrollView.setOnScrollChangeListener。'

我理解NoClassDefFoundError源于编译时存在的库,但不是在运行时。这是一个项目配置问题,通常是由于引用了同一个库的两个不同版本。在这个流行的StackOverflow question中可以阅读更多有关NoClassDefFoundError的信息。

我很确定我没有这样的项目配置问题,因为它在API 22上运行得很好。那么,那么在这里发生了什么?此外,我正在以正确的方式解决这个问题吗?或者,是否有更好的方法将滚动更改事件从JS发送到本机?

1 个答案:

答案 0 :(得分:0)

在API级别23中添加了View.OnScrollChangeListener。解决方法是使用

mScrollView.getViewTreeObserver().addOnScrollChangedListener(listenerInstance);

如果您尝试获取X,Y值,上述回调侦听器将没有多大帮助。