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. androidstudio判断手指滑动方向_方向盘的黑科技有多“黑”
  2. 风控特征—关系网络特征工程入门实践
  3. 前端开发中的Error以及异常捕获
  4. 《元学习meta learning)》2020综述论文大全!
  5. java金字塔数字代码_Java基础代码实例 :在控制台中输出金字塔,这个金字塔是由左右对称的数字组成的。 | 学步园...
  6. npm package.json文件解读
  7. Java文件路径(getResource)
  8. UGUI 自动布局的重叠BUG
  9. matlab dpsk,2DPSK调制与解调matlab(最新整理)
  10. 用ASP.Net写一个发送ICQ信息的程序
  11. HDU 5281 Senior#39;s Gun 杀怪
  12. 将list中的数据类型都变成int类型
  13. 学习UVC协议需要的工具
  14. Oracle大幅裁员,甲骨文云计算业务在华遭遇“滑铁卢”?
  15. python初级练习
  16. FFMpeg 滤镜中英文对照
  17. Unity_AR制作_80
  18. java facade dao_nsg-DAO
  19. 产品经理考什么证书?考这个准没错
  20. 应用时间序列分析清华大学出版社电子版_数据分析模型9——预知未来的算法:时间序列分析...

热门文章

  1. 简单理解基于PCA的人脸识别
  2. HEIST攻击:从HTTPS加密数据中获取明文
  3. 二叉树的前序遍历,二叉树的中序遍历,二叉树的后序遍历,二叉树的层序遍历
  4. 安装cnpm淘宝NPM镜像
  5. 【Java】判断电话号码所属的运营商
  6. 【DB笔试面试682】在Oracle中,Undo段中区3种状态分别是什么(Undo表空间系列)?...
  7. vulnhub-The Planets: Mercury
  8. 小学计算机应用到英语课教案,信息技术与小学英语教学的整合
  9. 腾讯python招聘_2019年最新Python爬取腾讯招聘网信息代码解析
  10. Canoe logging block