关于ViewPager冲突问题分析及解决思路

2016-06-01 21:00 阅读 3,413 次 评论 1 条
版权声明:本文著作权归TeachCourse所有,未经许可禁止转载,谢谢支持!
转载请注明出处:http://teachcourse.cn/1795.html

摘要

父控件拦截子控件的触摸事件解决办法,重写子控件中的onInterceptTouchEvent(boolean)方法,然后设置父控件在执行该方法时返回true,即父控件不拦截子控件的触摸事件。经常遇到的一个触摸冲突的一个控件ViewPager,ViewPager可以左右滑动,每个Fragment展示新闻列表,使用PullToRefreshListView控件,在设置的适配器中第一栏添加头条滚动效果,需要给头条添加左右滑动的事件,这个时候与ViewPager的左右滑动冲突。重写子控件是第一种解决办法,第二种解决办法是重写父控件,其原理就是设置父控件的onInterceptTouchEvent()返回值为true,以后再遇到事件冲突的问题都可以这样子解决。

onRequestDisallowTouchEvent.gif

第一种解决办法:重写子控件

  1. private ViewGroup parent;    
  2.     public void setDisallowInterceptParentTouchEvent(ViewGroup parent) {    
  3.         this.parent = parent;    
  4.     }  
  5.     @Override    
  6.     public boolean dispatchTouchEvent(MotionEvent ev) {    
  7.         if (parent != null) {    
  8.             parent.requestDisallowInterceptTouchEvent(true);    
  9.         }    
  10.         return super.dispatchTouchEvent(ev);    
  11.     }    
  12.     
  13.     @Override    
  14.     public boolean onInterceptTouchEvent(MotionEvent arg0) {    
  15.         if (parent != null) {    
  16.             parent.requestDisallowInterceptTouchEvent(true);    
  17.         }    
  18.         return super.onInterceptTouchEvent(arg0);    
  19.     }    
  20.     
  21.     @Override    
  22.     public boolean onTouchEvent(MotionEvent arg0) {    
  23.         if (parent != null) {    
  24.             parent.requestDisallowInterceptTouchEvent(true);    
  25.         }    
  26.         return super.onTouchEvent(arg0);    
  27.     }  

第二种解决办法:重写父控件

  1. @Override    
  2.     public boolean dispatchTouchEvent(MotionEvent ev) {    
  3.            
  4.         requestDisallowInterceptTouchEvent(true);    
  5.            
  6.         return super.dispatchTouchEvent(ev);    
  7.     }    
  8.     
  9.     @Override    
  10.     public boolean onInterceptTouchEvent(MotionEvent arg0) {    
  11.            
  12.         requestDisallowInterceptTouchEvent(true);    
  13.           
  14.         return super.onInterceptTouchEvent(arg0);    
  15.     }    
  16.     
  17.     @Override    
  18.     public boolean onTouchEvent(MotionEvent arg0) {    
  19.          
  20.         requestDisallowInterceptTouchEvent(true);    
  21.           
  22.         return super.onTouchEvent(arg0);    
  23.     }  

解决的原理:设置父控件的onInterceptTouchEvent()返回值为true,请求不拦截触摸事件

关注公众号 扫一扫二维码,加我QQ

如果文章对你有帮助,欢迎点击上方按钮关注作者

来源:TeachCourse每周一次,深入学习Android教程,关注(QQ1589359239或公众号TeachCourse)
转载请注明出处:http://teachcourse.cn/1795.html
分类:Android 标签:,
Android开发之UML类图简介 Android开发之UML类图简介
常用创建TabHost导航的几种方式 常用创建TabHost导航的几种方式
Oracle VM VirtualBox启动提示“创建COM对象失败” Oracle VM VirtualBox启动提
带www和不带www域名与网站收录量、权重关系 带www和不带www域名与网站收录量

发表评论

呲牙 憨笑 坏笑 偷笑 色 微笑 抓狂 睡觉 酷 流汗 鼓掌 大哭 可怜 疑问 晕 惊讶 得意 尴尬 发怒 奋斗 衰 骷髅 啤酒 吃饭 礼物 强 弱 握手 OK NO 勾引 拳头 差劲 爱你

表情

  1. 夏日博客
    夏日博客 【农民】 @回复

    这种效果我一般都是直接从网上下载源码,真心不会调试。