问题出现场景:

TabLayout + ViewPager + Fragment,Fragment中包含一个横向滑动的RecyclerView,出现了左右滑动RecyclerView时会与ViewPager冲突。

解决思路:

手指触碰到RecyclerView时禁止ViewPager滑动,手指离开时恢复。

解决方法:

1、重写ViewPager使其滑动事件变为可以控制的,代码:

/*** @Description isCanSlide 设置为false时,viewpager不能横向滑动,用在横向滑动控件与viewpager冲突时* @Version 1.0*/
public class CanCtrlSlideViewPager extends ViewPager {boolean isCanSlide = true;public CanCtrlSlideViewPager(@NonNull Context context) {super(context);}public CanCtrlSlideViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if(!isCanSlide){//设置为false时,viewpager不能横向滑动requestDisallowInterceptTouchEvent(true);//使viewpager不再通过onInterceptTouchEvent捕获触摸事件}return super.dispatchTouchEvent(ev);}public void setCanSlide(boolean canSlide) {isCanSlide = canSlide;}public boolean isCanSlide() {return isCanSlide;}
}

2、监听RecyclerView的OnTouch事件,也可以监听item的OnTouch事件,代码:

setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {if(event.getAction() == MotionEvent.ACTION_DOWN){mViewPager.setCanSlide(false);//viewpager禁止横向滑动}else if(event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL){mViewPager.setCanSlide(true);//viewpager解除禁止横向滑动}return false;}
});

以上亲测有效,如有不足之处,敬请指正。

解决过程遇到的问题:

在百度的过程中,网上的解决方案大多数都是继承RcyclerView并重写onTouch方法,判断手指的滑动行为,再使用

 getParent().requestDisallowInterceptTouchEvent(true);

经过测试,并没有效果,猜测应该是 getParent()拿到的并不是Viewpager,解决方法应该是把ViewPager传入RecyclerView中,然后使用ViewPager的引用对象调用requestDisallowInterceptTouchEvent(true)方法。此方法并未验证,纯属猜测。

结束

RecyclerView横向滑动与ViewPager冲突问题相关推荐

  1. RecyclerView 横向滑动

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrie ...

  2. RecyclerView实现横向滑动

    效果图如下 引入别人的git仓库,在bulid.gradle文件中添加,就可以运用大佬写的PagerGridLayoutManager类了: api 'com.github.shenbengit:Pa ...

  3. Android之解决ScrollView包裹了两个RecyclerView导致滑动冲突问题

    1 问题 ScrollView包裹了两个RecyclerView导致滑动冲突问题 2 解决办法 给ScrollView和两个RecyclerView分别设置isNestedScrollingEnabl ...

  4. ViewPager套嵌RecyclerView出现滑动条目时滑不动原因

    ViewPager套嵌RecyclerView出现滑动条目时滑不动原因 在滑动条目时,在有TextView地方滑不动,在条目其他空白地方却可以滑动,去除 android:singleLine=&quo ...

  5. Android ScrollView与 X5Webview+RecyclerView的滑动冲突解决

    要解决ScrollView嵌套的X5WebView.滑动.高度冲突,则首先要解决ScrollView与 X5Webview的滑动冲突, <ScrollView     android:layou ...

  6. ViewPager设置setPageTransformer后RecyclerView垂直滑动问题

    viewPager设置setPageTransformer后RecyclerView垂直滑动问题中. 处理方法: 在垂直滑动中禁止viewpager滑动 viewPager.setPageTransf ...

  7. 仿网易新闻APP(五)——无限横向滑动菜单(自定义HorizontalScrollView+ViewPager)

    自从Gallery被谷歌废弃以后,Google推荐使用ViewPager和HorizontalScrollView来实现Gallery的效果.的确HorizontalScrollView可以实现Gal ...

  8. Android Scrollview嵌套RecyclerView导致滑动卡顿问题解决(屡试不爽)

    今天开发的一个项目首页,布局还是比较复杂的,各种滑动冲突,(Banner+横向RecyclerView+纵向RecyclerView(item又是横向的RecyclerView)),  最外面的框架用 ...

  9. RecyclerView跳转到指定位置,RecyclerView上下滑动监听,RecyclerView滑动速度

    1.RecyclerView跳转到指定位置 只需调用recycleview的置顶方法: recyclerView.scrollToPosition(15); 如果你需要让第15item在屏幕居中,只需 ...

最新文章

  1. JavaScript实现eulerianPath欧拉路径算法(附完整源码)
  2. 智能指针——auto_ptr
  3. Java面试题40道
  4. Linux常用命令~~~
  5. Tomcat核心架构和启动流程解析
  6. 部门开始做技术talk
  7. 从硅谷产品经理谈谈:AI产品经理要不要懂技术算法?
  8. html广告飘窗,一个JS解决所有的飘窗广告
  9. 基于Java的实时通信软件的设计(类似微信)
  10. 用jupyter notebook修改.md文件后,遇见的问题:Jupyter上无法保存md文件; FileNotFoundError: [Errno 2] No such file or direc
  11. Cortex-M3的时钟
  12. 算法初体验之欧几里得算法
  13. 关于风险和收益的想法
  14. 初识GeneXus产品
  15. KANKAN AI不良信息过滤技术:用数据证明自己是最好的
  16. P4315 月下“毛景树” (树链剖分)
  17. Jexus-5.6.3使用详解
  18. linux中rpm.bin文件与bin文件的区别
  19. dwg文件怎么打开呢?
  20. 测绘人必看:0基础使用土方量算,一看就会!

热门文章

  1. 在MVC框架上定时执行某种操作
  2. Nibiru Open Day,OZO 遇见 DigiArtist 国际数字艺术展
  3. x264代码剖析(一):图文详解x264在Windows平台上的搭建
  4. 禁止ScrollView在子控件的布局改变时自动滚动的的方法
  5. Skype for Business Server 2015-07-边缘服务器-3-部署
  6. 关于DSP的GPIO的输入输出设置
  7. sicily 1004 I Conduit!
  8. 2、String相关问题
  9. 千万级流量的大型分布式系统架构设计
  10. ThreadLocal为什么要使用弱引用和内存泄露问题