在viewpager中嵌套fragment再嵌套viewpager的事件分发问题解决
来源:互联网 发布:微软雅黑blod mac 编辑:程序博客网 时间:2024/06/14 02:29
在现在的应用中经常能碰到在activity中,一个viewpager+tab然后pager内嵌套fragment再内嵌viewpager+fragment,在组合多样化的同时也带来了一些问题。嵌套情况下pager的事件分发在实际应用中我最开始使用的是v4包的viewpager,测试发现的问题是,当我操作内层pager的时候,只能滑动一点点距离然后触摸事件马上被外层pager抢走,内层根本无法滑动切换页面。此问题的解决办法是,重写子pager,为子pager添加自己的点击事件。嵌套情况下子pager滑到边缘的事件分发条件只添加了点击事件修改了调用之后,内层pager可以滑动了,但是当内层pager滑到边缘的时候,我继续滑动,想要再把事件分发给外层pager来操作。解决办法:在touch事件中记录点击的坐标,在move事件中通过x轴坐标计算判断滑动的方向和是否在最后一页时继续左划或者在第一页时继续右划。添加了配置总页数的方法以下为重写的子viewpager的代码public class ChildViewPager extends ViewPager{ /** 触摸时按下坐标 **/ PointF downP = new PointF(); /** 触摸时当前坐标 **/ PointF curP = new PointF(); OnSingleTouchListener onSingleTouchListener; /** 当前pager的总页数 **/ int listCount; public ChildViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public ChildViewPager(Context context) { super(context); } @Override public boolean onInterceptTouchEvent(MotionEvent arg0) { //在此位置返回true,将事件拦截在子pager中 return true; } //添加总页数记录,在给pager配置adapter时要调用此方法把总页数添加进来 public void setListSize(int size){ listCount = size; } //获取总页数 public int getFragmentCount(){ return listCount; } @Override public boolean onTouchEvent(MotionEvent arg0) { //每次onTouch事件触发时都记录当前按下的坐标 curP.x = arg0.getX(); curP.y = arg0.getY(); if(arg0.getAction() == MotionEvent.ACTION_DOWN){ //记录按下时候的坐标 downP.x = arg0.getX(); downP.y = arg0.getY(); //此句代码是避免父pager对操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); } if(arg0.getAction() == MotionEvent.ACTION_MOVE){ //判断是否是在第一个页面继续右划或者是否在最后一个页面时继续左划 //如果是,把事件给到父级pager if(getCurrentItem()==getFragmentCount()-1&&downP.x-curP.x>0||getCurrentItem()==0&&downP.x-curP.x<0){ getParent().requestDisallowInterceptTouchEvent(false); }else{ getParent().requestDisallowInterceptTouchEvent(true); } } if(arg0.getAction() == MotionEvent.ACTION_UP){ //在此时判断按下和松手是否在同一位置 //如果是,执行自己写的点击事件 if(downP.x==curP.x && downP.y==curP.y){ onSingleTouch(); return true; } } return super.onTouchEvent(arg0); } //点击事件 public void onSingleTouch() { if (onSingleTouchListener!= null) { onSingleTouchListener.onSingleTouch(); } } //创建点击事件接口 public interface OnSingleTouchListener { public void onSingleTouch(); } public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) { this.onSingleTouchListener = onSingleTouchListener; }}再配上自己重写的FragmentPagerAdapterpublic class MyFragmentPagerAdapter extends FragmentPagerAdapter{ private List<Fragment> fragments = new ArrayList<Fragment>(); public void addFragment(Fragment fragment){ if(fragment!=null){ this.fragments.add(fragment); } } public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int arg0) { return fragments.get(arg0); } @Override public int getCount() { return fragments.size(); }}
0 0
- 在viewpager中嵌套fragment再嵌套viewpager的事件分发问题解决
- 在viewpager中嵌套fragment再嵌套viewpager的事件分发问题解决
- ViewPager嵌套ViewPager,的事件分发机制!
- 在菜单中Fragment中嵌套viewpager
- 在ViewPager中使用Fragment嵌套问题
- ViewPager嵌套Fragment再嵌套ViewPager嵌套Fragment
- 关于viewpager+fragment中嵌套viewpager+fragment的问题处理:
- 解决ViewPager中嵌套ViewPager的滑动分发问题
- 关于fragment中嵌套viewpager的问题
- 在Fragment中使用viewPager嵌套Fragment遇到的问题(双侧viewpager)
- 嵌套viewpager触摸的事件分发事件处理
- viewPager+fragment嵌套viewPager+fragment
- ViewPager+Fragment嵌套ViewPager+Fragment
- viewpager的fragment嵌套viewpager的问题
- fragment嵌套viewpager viewpager嵌套fragment 的bug
- Viewpager + Fragment 的双层嵌套
- Viewpager 嵌套fragment的问题
- Android_BUG_ViewPager+Fragment(Fragment中嵌套Viewpager,Viewpager中有嵌套Fragement的场景)爆出的BUG
- JZOJ4867【NOIP2016提高A组集训第8场11.5】心理学概论
- eclipse配置外部工具利用javah一键生成头文件
- spring+springmvc+mybatis+angularjs java web项目
- 【十八】线性二次型调节控制
- HDU 2046 骨牌铺方格(斐波那契递推 或者 状压DP)
- 在viewpager中嵌套fragment再嵌套viewpager的事件分发问题解决
- 第二十二讲项目4-分支嵌套流程图【五级成绩】
- 【python】Linux服务器下安装python 的 MySQLdb 以及常见报错解决
- elasticsearch zen发现
- 数据库学习笔记和小练习(5)视图
- 20161105提高A组总结
- html form表单提交后不刷新不跳转的实现方法------
- 怎么根据程序读到的ADC值,推算实际电压值?
- C++输入流状态变化的一点小细节