关于ViewPager 嵌套ViewPager和flyco依赖冲突的解决办法
来源:互联网 发布:无人机电调算法 编辑:程序博客网 时间:2024/05/22 00:11
首先明确一点的是ViewPager是可以嵌套ViewPager的
最外层ViewPager控制主页面,简称为pOne
pOne的某一个子页面,或多个子页面嵌套的ViewPager ,简称为pSon
其实简单的嵌套,带来的问题主要是两点:
1.pOne与pSon的滑动监听控制
2.pOne与pSon的关联fragment的管理
解决办法也很简单:
1.在不做任何处理的情况下,在滑动页面时,只有当pSon滑动完所有页面,pOne才会继续滑动页面
如果想要只控制pSon的滑动,其实可以通过重写ViewPager,将pOne的滑动监听事件禁掉就可以了。
重写代码:
package com.hjk.shiny.weshop.overwrite;import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.MotionEvent;/** * Created by Maibenben on 2017/12/7. */public class CustomViewPager extends ViewPager{ //滑动开关控制常量 private boolean enable=false; //重写构造 public CustomViewPager(Context context){ super(context); } //重写构造 public CustomViewPager(Context context, AttributeSet attrs) { super(context, attrs); } //触碰事件 @Override public boolean onTouchEvent(MotionEvent ev) { if(this.enable){ //开关打开,事件不进行拦截 return super.onTouchEvent(ev); } //默认拦截状态 return false; } //拦截事件监听 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if(this.enable){ //开关打开,即处理拦截下来的touch事件 return super.onInterceptTouchEvent(ev); } //默认状态不处理来接下来的事件 return false ; } //传递触摸事件 @Override public boolean dispatchTouchEvent(MotionEvent ev) { //处理事件的分发,将拦截到的事件分发到viewpager下的子view中去 //这个拦截了就没有后续事件发生了,到viewpager为止 //可以拦 if(this.enable){ return super.dispatchTouchEvent(ev); } //一般都不拦的 return super.dispatchTouchEvent(ev); } //留一个方法修改开关的开启关闭状态 public boolean setViewPagerState(Boolean b){ this.enable=b; return this.enable; }}注释很详细,就不多说了
2.关于fragment的管理。
由于pSon创建于pOne的fragment页面中,所以在获取自己的FragmentManager时,需要通过getChildFragmentManager()方法来获取,而不是像pOne在Activity中通过getSupportFragmentManager()或者getFragmentManager()来获取。通过FragmentPagerAdapter的继承子类适配器来适配pSon即可。
接下来再来谈一谈 依赖库 com.flyco.tablayout ,没用过或者不知道下载地址的话,可以通过这个链接去看看:
https://github.com/H07000223/FlycoTabLayout 东西是好东西,可惜在ViewPager与ViewPager的嵌套过程中起了冲突,在pOne中嵌套使用FlycoTabLayout会使得pSon与pOne的FragmentManager出现线程混乱的问题,最终结果即导致线程奔溃报错。解决办法:使pOne与pSon处于伪嵌套关系,即pOne与pSon实际处理平行关系,在两个视图交接处通过Gone和Visible的切换,实现视觉嵌套效果。代码很简单,就不贴了,稍后会贴出整个应用的框架代码,即拿即用,往里填内容即可。
阅读全文
0 0
- 关于ViewPager 嵌套ViewPager和flyco依赖冲突的解决办法
- 关于ListView和ViewPager冲突的解决办法
- ScrollView嵌套ViewPager冲突的解决办法
- scrollview 嵌套 viewpager 滑动冲突的解决办法
- Viewpager嵌套滑动冲突解决办法
- scrollview和viewpager嵌套冲突的问题
- 【事件冲突】ScrollView嵌套ViewPager冲突的解决办法
- viewPager嵌套viewPager的事件冲突问题,
- ViewPager嵌套ViewPager的冲突解决
- viewPager和listview嵌套冲突
- ViewPager和ViewPager的冲突
- ViewPager中嵌套ViewFlipper手势冲突的解决办法
- ViewPager 和 SlidingPaneLayout 冲突解决办法
- Viewpager嵌套冲突问题
- ScrollView嵌套ViewPager冲突
- 解决viewpager嵌套viewpager和其他view 冲突问题
- 关于PopupWindow中无法嵌套viewpager+Fragment的解决办法!
- Android ViewPager嵌套ViewPager滑动冲突的解决方法
- 【VB.net自学笔记(三)】StreamReader与StreamWriter的应用——UTF-8文本的读写
- 关于MySQL的按照id进行删除记录
- 19、备忘录模式(Memento)
- AAPT2 编译报错 AAPT2 error
- vim关闭子窗口
- 关于ViewPager 嵌套ViewPager和flyco依赖冲突的解决办法
- 浅析全局变量与局部变量
- eclipse Server Tomcat Server at localhost failed to start.命令行可启动
- 20、状态模式(State)
- Nginx + Tomcat 动静分离实现负载均衡
- 百度地图定位功能的错误has leaked ServiceConnection 解决
- 欢迎使用CSDN-markdown编辑器
- filter过滤器简单实例
- URL编码/解码