有时候我们会有一种需求,一个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 }
ViewPager和SwipeRefreshLayout之间嵌套使用时发生"事件"冲突
原文:http://www.cnblogs.com/gzdx-tjh/p/5215330.html