ViewPager和SwipeRefreshLayout之间嵌套使用时发生"事件"冲突

有时候我们会有一种需求,一个ViewPager有n个页面,每个页面是一个Fragment,在Fragment中使用了具有垂直滑动属性的控件,比如SwipeRefreshLayout!!!

这时二者之间的滑动事件就会产生冲突!!产生一个莫名其妙的空指针异常!解决的办法是重写ViewPager的“onInterceptTouchEvent”方法,

使得事件在传递过程中不被异常中断(try{}catch{}捕获异常并返回true),现在贴上代码,如果遇到类似错误的同学可以借鉴,如果有什么纰漏请不吝指正!

 1 public class CompatViewPager extends ViewPager {
 2     public CompatViewPager(Context context) {
 3         super(context);
 4     }
 5 
 6     public CompatViewPager(Context context, AttributeSet attrs) {
 7         super(context, attrs);
 8     }
 9 
10     /**
11      * 决定我们是否想要拦截这个手势,如果返回true,
12      * onMotionEvent就会接受到事件,并且在其中发生滑动的操作.
13      * 所以这段代码的原理是:当ViewPager和SwipeRefreshLayout滑动冲突的时候直接返回true,
14      * 使得ViewPager可以正常滑动(至于怎么产生冲突的我也不知道)
15      * @param ev
16      * @return
17      */
18     @Override
19     public boolean onInterceptTouchEvent(MotionEvent ev) {
20         try {
21             return super.onInterceptTouchEvent(ev);
22         } catch (Exception e) {
23             return true;
24         }
25     }
26 }

 

posted @ 2016-02-24 22:04  Vigour/陶江航  阅读(1477)  评论(0编辑  收藏  举报