解决RecyclcerView嵌套ViewPager2滑动冲突问题

一、页面控件布局

  • SmartRefreshLayout

    • CoordinaLayout

      • AppBarLayout

        • RecyclerView

          • ViewPager2

二、问题出现

在上下滑动过程中,发现 AppBarLayout 的 addOnOffsetChangedListener 不回调,导致在里面的部分逻辑不生效,页面出现问题。

三、问题分析

当时第一反应就是滑动发生了冲突,因为 ViewPager2 是处理了上下、左右滑动的,而上下滑动如果没有处理好,就会导致父控件与子控件之间滑动发生冲突。考虑到 ViewPager2 实际就是利用 RecyclerView 来实现的功能,而RecyclerView嵌套横向滑动的RecyclerView又是老生常谈的问题,所以当时优先考虑调用RecyclerViewsetNestedScrollingEnabled来解决。

但在对 ViewPager2 的源码进行阅读时并未发现有对应的 API 提供,因为使用了反射

具体代码如下:

Field field = mViewPager2.getClass().getDeclaredField("mRecyclerView");
field.setAccessible(true);
RecyclerView recyclerView = (RecyclerView) field.get(mViewPager2);
recyclerView.setNestedScrollingEnabled(false);
复制代码

最后完美解决!!!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享