第一次写博客,不知道怎么描述,那就直接说干货吧。就是在做项目时,通常遇到的情况是类似于viewpager嵌套listview,listview需要有下拉功能,于是就会在listview外嵌套一个下拉刷新控件。这样通常是没有问题的,但是如果说在某些项目中需要在viewpager外加下拉控件的话(ps:接口包含的数据多的情况),这是我们会发现不论什么时候只要是下滑就会触发下拉控件的刷新功能。这是因为下拉控件根据viewpager是否已到达顶部,如果到达顶部就会触发,然而数据都是存在listview中。
如何解决问题呢?我想到的方法是,重写listview重写dispatchTouchEvent方法。在里面判断数据是否到达顶部,如果到没有达顶部就反拦截到达就不反拦截。代码如下:
@Override public boolean dispatchTouchEvent(MotionEvent ev) { // return true; if(isListViewReachTopEdge(this)) { requestDisallowInterceptTouchEvent(false); }else { requestDisallowInterceptTouchEvent(true); } return super.dispatchTouchEvent(ev); } //是否到顶 public boolean isListViewReachTopEdge(final ListView listView) { boolean result=false; if(listView.getFirstVisiblePosition()==0){ final View topChildView = listView.getChildAt(0); result=topChildView.getTop()==0; } return result ; }