RecycleView和ViewPager冲突解决与原理
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冲突解决与原理相关推荐
- Android之解决ScrollView嵌套RecycleView导致滑动冲突或者显示不全的问题
1 问题 ScrollView嵌套RecycleView导致滑动冲突或者显示不全的问题 2 解决办法 1).ScrollView替换成普通布局,然后RecycleView用的BaseMultiItem ...
- Android滑动冲突解决方法
Android滑动冲突解决方法 滑动冲突 首先讲解一下什么是滑动冲突.当你需要在一个ScrollView中嵌套使用ListView或者RecyclerView的时候你会发现只有ScrollView能够 ...
- NestedScrollView、RecycleView、ViewPager 嵌套常见问题
在开发中我们经常会用到 NestedScrollView 和 RecycleView,一般情况下这两种布局是不需要进行嵌套的,很多情况下 RecycleView 就可以自行解决,但是毕竟是一般情况,因 ...
- RecyclerView横向滑动与ViewPager冲突问题
问题出现场景: TabLayout + ViewPager + Fragment,Fragment中包含一个横向滑动的RecyclerView,出现了左右滑动RecyclerView时会与ViewPa ...
- mysql 主从,主主,主主复制时的主键冲突解决
原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log 然后sql thread不断的更新slave的数据 把主服务器所有的数据复制给从服 ...
- Java 8中HashMap冲突解决
Java 8中HashMap冲突解决 目录(?)[+] 在Java 8 之前,HashMap和其他基于map的类都是通过链地址法解决冲突,它们使用单向链表来存储相同索引值的元素.在最坏的情况下,这种方 ...
- 哈希表及哈希冲突解决办法
哈希表及哈希冲突解决办法 目录 什么是哈希表? 哈希表的数据结构 哈希冲突 哈希冲突解决办法 1. 什么是哈希表? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直 ...
- SVN:冲突解决 合并别人的修改
在项目中,基本不可避免多个人同时参与一个项目,因此就可能会出现多个人同时修改一个文件的情况,就不可避免的会出现冲突.svn已经很聪明了,如果你和别人对于同一个文件的修改之间不存在重叠(比如你在文件最开 ...
- jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理
jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理 最近在看jquery源码分析的视频教学,希望将视频中学到的知识用博客记录下来,更希望对有同样对jquery源码有困惑 ...
最新文章
- poj1625Censored!(AC自动机+dp)
- Error 200 fault:SOAP-ENV:Client [no subcode]
- u-boot分析之makefile分析(二)
- mysql创建存储时覆盖_总结到位的MySQL 的覆盖索引与回表
- COM.MYSQL.JDBC.DRIVER 和 COM.MYSQL.CJ.JDBC.DRIVER的区别
- 基于android的视频播放器,基于Android的视频播放器的设计与实现-.doc
- html a标签指定区域,第四讲:使用html5中的canvas标签画出一个球在指定区域内的运动...
- 阶段3 1.Mybatis_12.Mybatis注解开发_1 mybatis注解开发的环境搭建
- 坑杀全球顶级量化大佬的经典案例:价值投资就是看财务指标吗?
- 凸优化学习笔记(四):对偶性、KKT 条件、敏感性分析
- abaqus帮助文档html,2534-VUMAT用户子程序翻译ABAQUS帮助手册.doc
- 电脑技巧 ADSL如何远程盗号
- python三对角矩阵_用NumPy实现三对角矩阵算法(TDMA)
- 关于pandownload源码的一般性研究与挖掘
- 常见的知识图谱(Wikidata、YAGO、ConceptNet、DBpedia)
- 【前端技术】一篇文章搞掂:HTML
- sql 查询之分段统计
- job全异常 mapreduce_eclipse 运行MapReduce程序错误异常汇总(解决Map not fount)
- qa 芯片测试_芯片测试的几个术语及解释
- 使用扩散模型从文本提示中生成3D点云
热门文章
- 黑马威武||《ChatGPT全通关》免费学
- 【WEB前端开发】基础知识大总结(HTML5+CSS3)
- 磁盘整理,解决无法压缩C盘多余空间的问题(无法将卷压缩到超出任何不可移动的文件所在的点)
- 快速开发平台 WebBuilder 8.4 发布
- mini-Imagenet处理
- 刀锋战士,智能时代的守护者
- 1947-08-21 00:00:00从数据库返回到前台为何少了一个小时
- 用面对对象的方式点击表头排序
- 深圳航空机票查询API
- “libgomp.so.1: version `GOMP_4.0' not found” || “libstdc++.so.6: version `CXXABI_1.3.8' not found”错误