1.概述

在实际开发中,我们经常遇到需要在ListView或RecycleView头部添加ViewPager实现Banner轮播效果,并需要添加下拉刷新,上拉加载功能。
但,横向滑动ViewPager时,稍微偏移就会失去焦点。

2.解决方案

我们知道事件拦截的顺序,父ViewGroup先接收到拦截,再传递给子ViewGroup 或子View。事件的处理顺序是,子ViewGroup 或子View先处理,若子ViewGroup处理了,父ViewGroup就不用处理,若子ViewGroup未处理,则传给父ViewGroup处理。
根据事件拦截原理,ViewPager和RecycleView相互冲突,RecycleView相当于父ViewGroup,ViewPager相当于子View,ViewPager和RecycleView相互冲突,将父View传到ViewPager里面处理,重写View Pager。使用父类方法requestDisallowInterceptTouchEvent(true)
,用来子View告诉父容器不要拦截我们的事件的。

  • (1)重写ViewPager
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewGroup;/*** Developer:chunsoft on 2016/10/31 16:04* Email:chun_soft@qq.com* Content:viewPager和RecycleView相互冲突,将父View传到ViewPager里面* 使用父类方法requestDisallowInterceptTouchEvent(true)* 用来子View告诉父容器不要拦截我们的事件的*/public class DecoratorViewPager extends ViewPager{private ViewGroup parent;public DecoratorViewPager(Context context) {super(context);}public DecoratorViewPager(Context context, AttributeSet attrs) {super(context, attrs);}public void setNestedpParent(ViewGroup parent) {this.parent = parent;}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (parent != null){parent.requestDisallowInterceptTouchEvent(true);}return super.dispatchTouchEvent(ev);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {if (parent != null){parent.requestDisallowInterceptTouchEvent(true);}return super.onInterceptTouchEvent(ev);}@Overridepublic boolean onTouchEvent(MotionEvent ev) {if (parent != null){parent.requestDisallowInterceptTouchEvent(true);}return super.onTouchEvent(ev);}
}
  • (2)在Activity中:
DecoratorViewPager mPager = (DecoratorViewPager) mHeaderView.findViewById(R.id.viewpager);mPager.setNestedpParent((ViewGroup) mPager.getParent());
  • (3)在布局文件中:
<com.chunsoft.baseframework.utils.view.DecoratorViewPager
        android:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="180dp" />

RecycleView和ViewPager冲突解决与原理相关推荐

  1. Android之解决ScrollView嵌套RecycleView导致滑动冲突或者显示不全的问题

    1 问题 ScrollView嵌套RecycleView导致滑动冲突或者显示不全的问题 2 解决办法 1).ScrollView替换成普通布局,然后RecycleView用的BaseMultiItem ...

  2. Android滑动冲突解决方法

    Android滑动冲突解决方法 滑动冲突 首先讲解一下什么是滑动冲突.当你需要在一个ScrollView中嵌套使用ListView或者RecyclerView的时候你会发现只有ScrollView能够 ...

  3. NestedScrollView、RecycleView、ViewPager 嵌套常见问题

    在开发中我们经常会用到 NestedScrollView 和 RecycleView,一般情况下这两种布局是不需要进行嵌套的,很多情况下 RecycleView 就可以自行解决,但是毕竟是一般情况,因 ...

  4. RecyclerView横向滑动与ViewPager冲突问题

    问题出现场景: TabLayout + ViewPager + Fragment,Fragment中包含一个横向滑动的RecyclerView,出现了左右滑动RecyclerView时会与ViewPa ...

  5. mysql 主从,主主,主主复制时的主键冲突解决

    原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log 然后sql thread不断的更新slave的数据 把主服务器所有的数据复制给从服 ...

  6. Java 8中HashMap冲突解决

    Java 8中HashMap冲突解决 目录(?)[+] 在Java 8 之前,HashMap和其他基于map的类都是通过链地址法解决冲突,它们使用单向链表来存储相同索引值的元素.在最坏的情况下,这种方 ...

  7. 哈希表及哈希冲突解决办法

    哈希表及哈希冲突解决办法 目录 什么是哈希表? 哈希表的数据结构 哈希冲突 哈希冲突解决办法 1. 什么是哈希表? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直 ...

  8. SVN:冲突解决 合并别人的修改

    在项目中,基本不可避免多个人同时参与一个项目,因此就可能会出现多个人同时修改一个文件的情况,就不可避免的会出现冲突.svn已经很聪明了,如果你和别人对于同一个文件的修改之间不存在重叠(比如你在文件最开 ...

  9. jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理

    jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理 最近在看jquery源码分析的视频教学,希望将视频中学到的知识用博客记录下来,更希望对有同样对jquery源码有困惑 ...

最新文章

  1. poj1625Censored!(AC自动机+dp)
  2. Error 200 fault:SOAP-ENV:Client [no subcode]
  3. u-boot分析之makefile分析(二)
  4. mysql创建存储时覆盖_总结到位的MySQL 的覆盖索引与回表
  5. COM.MYSQL.JDBC.DRIVER 和 COM.MYSQL.CJ.JDBC.DRIVER的区别
  6. 基于android的视频播放器,基于Android的视频播放器的设计与实现-.doc
  7. html a标签指定区域,第四讲:使用html5中的canvas标签画出一个球在指定区域内的运动...
  8. 阶段3 1.Mybatis_12.Mybatis注解开发_1 mybatis注解开发的环境搭建
  9. 坑杀全球顶级量化大佬的经典案例:价值投资就是看财务指标吗?
  10. 凸优化学习笔记(四):对偶性、KKT 条件、敏感性分析
  11. abaqus帮助文档html,2534-VUMAT用户子程序翻译ABAQUS帮助手册.doc
  12. 电脑技巧 ADSL如何远程盗号
  13. python三对角矩阵_用NumPy实现三对角矩阵算法(TDMA)
  14. 关于pandownload源码的一般性研究与挖掘
  15. 常见的知识图谱(Wikidata、YAGO、ConceptNet、DBpedia)
  16. 【前端技术】一篇文章搞掂:HTML
  17. sql 查询之分段统计
  18. job全异常 mapreduce_eclipse 运行MapReduce程序错误异常汇总(解决Map not fount)
  19. qa 芯片测试_芯片测试的几个术语及解释
  20. 使用扩散模型从文本提示中生成3D点云

热门文章

  1. 黑马威武||《ChatGPT全通关》免费学
  2. 【WEB前端开发】基础知识大总结(HTML5+CSS3)
  3. 磁盘整理,解决无法压缩C盘多余空间的问题(无法将卷压缩到超出任何不可移动的文件所在的点)
  4. 快速开发平台 WebBuilder 8.4 发布
  5. mini-Imagenet处理
  6. 刀锋战士,智能时代的守护者
  7. 1947-08-21 00:00:00从数据库返回到前台为何少了一个小时
  8. 用面对对象的方式点击表头排序
  9. 深圳航空机票查询API
  10. “libgomp.so.1: version `GOMP_4.0' not found” || “libstdc++.so.6: version `CXXABI_1.3.8' not found”错误