SmartRefreshLayout icon indicating copy to clipboard operation
SmartRefreshLayout copied to clipboard

ViewPager2嵌套SmartRefreshLayout时,在下拉刷新或者上拉加载过程中,如果横向滑动距离过大时事件就交给ViewPager2了会导致横向滑动。

Open YuToo opened this issue 4 years ago • 7 comments

比如下拉刷新拉到一半了,这个时候如果再进行横向滑动,距离过大页面就横向滑动了,体验有点不太对,容易造成误切页面。上拉一样,很容易造成切换页面。特别是对于快速下拉刷新操作时。

YuToo avatar Oct 27 '20 02:10 YuToo

遇到同样问题,mark,同样case下下拉刷新或者上拉加载后,RecyclerView会强制收到ActionUp事件,但手指还没有松开,事件却交给了ViewPager2,所以导致了误切页面

SmartKidsLOL avatar Nov 16 '20 03:11 SmartKidsLOL

是的 都遇到这个问题了

liudaohong avatar Nov 23 '20 09:11 liudaohong

这个问题有解决方案了吗 没有的话就需要自己去集成SmartRefreshLayout 去修改吗

liudaohong avatar Nov 30 '20 01:11 liudaohong

不是你这个 你这个解决不了 我一直都是你这个 自定义RecyclerView 而且x必须大于10倍y 才给
这个问题是上拉后 刷新了 事件就被给ViewPager2 了 所以就导致了 这个问题 RecycyelrView 根本获取不到 TouchEvent

liudaohong avatar Dec 11 '20 06:12 liudaohong

详情具体看SmartRefreshLayout的源码中的finishLoadMore或者对应的下拉刷新方法,它的mNestedInProgress为True时,会分发一个ActionUp事件,有需要的话把这句注释掉,再改一改也能将就用

SmartKidsLOL avatar Dec 11 '20 07:12 SmartKidsLOL

请问这个问题解决了吗

w1984908499 avatar Aug 24 '23 02:08 w1984908499

我目前用的这个 修改Viewpager2 的滑动系数 里面具体多少 你自己可以调整 不过这个值 我自己用着还行

/** * 改变ViewPager2的滑动系数 * */ public static void changeViewPaer2 (ViewPager2 vp){ try { final Field recyclerViewField = ViewPager2.class.getDeclaredField("mRecyclerView"); recyclerViewField.setAccessible(true);

        final RecyclerView recyclerView = (RecyclerView) recyclerViewField.get(vp);//vb.viewpagerHome为要改变滑动距离的viewpager2控件

        final Field touchSlopField = RecyclerView.class.getDeclaredField("mTouchSlop");
        touchSlopField.setAccessible(true);

         final int touchSlop = (int) touchSlopField.get(recyclerView);
         touchSlopField.set(recyclerView, touchSlop*4);//通过获取原有的最小滑动距离 *n来增加此值
        //touchSlopField.set(recyclerView, 200);//自己写一个值
    } catch (Exception ignore) {
    }
}

liudaohong avatar Aug 24 '23 02:08 liudaohong