viewpager+fragment+recyclerview滑动卡顿/滑动冲突
问题描述
首先我要记录的滑动冲突不是水平和垂直的滑动冲突,而是水平水平的滑动冲突!!!!
简单说吧,项目里用到了一个viewpager+fragment+recyclerview的结构,recyclerview放在fragment里,然后使用viewpager来切换fragment。
项目里的recyclerview是不需要滑动的,之所以选用recyclerview是因为当一个个item传入时使用recyclerview来排列是一件很轻松的事。
然后问题来了,当我做完这些后,我滑动我的viewpager,发现每个页面都需要滑动两次才可以划过去,第一次滑动时见面显示我滑动到头了,然后再滑动就成功了。(他们都是水平滑动)
于是问题就是recyclerview的滑动和viewpager的滑动冲突了,所以在这里我需要把recyclerview的滑动禁用(反正我也用不着)
以下是我使用过的几种没有见效的方法,但还是列在这了
1. 修改xml文件
找到recyclerview的xml文件,然后加上一句 android:overScrollMode=“never”
如下所示
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"/>
在我的项目中设置后,滑动不会再出现提示到底的那个白边,但还是需要滑动两次才可以翻页
2.设置recyclerview
就一句话
recyclerview.setNestedScrollingEnabled(false)
这是我在一个博客里看到的,原文地址 https://blog.csdn.net/maxiaoteng_321519/article/details/76639366
最后博主也进一步添加了描述
“今天试了一下,setNestedScrollingEnabled(false)只适用于NestedScrollingChild的子类,简单来说就只适用于嵌套布局(前些天用的刚好是嵌套布局)。不嵌套的话还是看看其他人的答案吧”
解决方案
哈哈哈重头戏来了,其实也特别简单,就一句话 linearLayoutManager.setSmoothScrollbarEnabled(false);
代码如下:
RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.icon_recyclerview);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
//禁用滑动
linearLayoutManager.setSmoothScrollbarEnabled(false);
recyclerView.setLayoutManager(linearLayoutManager);
RecyclerViewIconAdapter recyclerViewIconAdapter = new RecyclerViewIconAdapter(for_mApps,getActivity());
recyclerView.setAdapter(recyclerViewIconAdapter);
在给recyclerview设置layoutmanager之前,将layoutmanager的setSmoothScrollbarEnabled设置为false就ok了,问题解决