使用SwipeRefreshLayout,网上资料copy了一个OnScrollListener给ListView,
结果当第一个item长度超过一屏,明明还没有到达列表顶部,Scroll事件就被拦截,列表无法滚动,同时启动了刷新。
修正代码后,自定义的OnScrollListener如下:
1/** 由于Listview与下拉刷新的Scroll事件冲突, 使用这个ScrollListener可以避免Listview滑动异常 */ 2public static class SwpipeListViewOnScrollListener implements AbsListView.OnScrollListener { 3 4 private SwipeRefreshLayout mSwipeView; 5 private AbsListView.OnScrollListener mOnScrollListener; 6 7 public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView) { 8 mSwipeView = swipeView; 9 } 10 11 public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView, 12 OnScrollListener onScrollListener) { 13 mSwipeView = swipeView; 14 mOnScrollListener = onScrollListener; 15 } 16 17 @Override 18 public void onScrollStateChanged(AbsListView absListView, int i) { 19 } 20 21 @Override 22 public void onScroll(AbsListView absListView, int firstVisibleItem, 23 int visibleItemCount, int totalItemCount) { 24 View firstView = absListView.getChildAt(firstVisibleItem); 25 26 // 当firstVisibleItem是第0位。如果firstView==null说明列表为空,需要刷新;或者top==0说明已经到达列表顶部, 也需要刷新 27 if (firstVisibleItem == 0 && (firstView == null || firstView.getTop() == 0)) { 28 mSwipeView.setEnabled(true); 29 } else { 30 mSwipeView.setEnabled(false); 31 } 32 if (null != mOnScrollListener) { 33 mOnScrollListener.onScroll(absListView, firstVisibleItem, 34 visibleItemCount, totalItemCount); 35 } 36 } 37}