关于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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 饥荒电脑联机植物生病怎么办 开车蹭到别人车怎么办 立定跳不会收腹怎么办 1岁宝宝有蛔虫怎么办 手机屏幕总是有网页跳出来怎么办 cs游戏屏幕变成正方形怎么办 大王卡被收回了怎么办 模拟人生4小人生病了怎么办 创造与魔法死后怎么办? 脚不小心扭伤了该怎么办 小鸡脚扭伤了该怎么办 跳高比赛最终成绩相等怎么办 热车1200怠速降不下来怎么办 大腿根骨髓水肿越来越疼怎么办 倒库方向打晚了怎么办 签吻芳颜祛斑液脸脱皮怎么办 3d右边工具栏消失了怎么办 3d菜单栏消失了怎么办 觉得自己性无能不敢谈对象怎么办 护士面试时被问到病人坠床怎么办 三次元仪器坏了怎么办 运动同手同脚怎么办 狗狗突然害怕不敢走路怎么办 一岁半宝宝因为害怕不敢走路怎么办 猫把背拱起来怎么办 穿猫跟鞋走路不稳怎么办 狗狗后腿内八字怎么办 快走后小腿粗了怎么办? 猫的嘴巴烂了怎么办 苹果8丢了已关机怎么办 肚子吃多了难受怎么办 喝水喝的肚子胀怎么办 肚子吃撑了难受怎么办 肚子撑得想吐怎么办 吃饭吃的太饱怎么办 吃饭吃的太撑怎么办 跑步迈不开步子怎么办 踏步走步子反了怎么办 微信不支持计步怎么办 肝癌二次介入后头晕心慌怎么办 跑步跑得胃疼怎么办