使用SwipeRefreshLayout,网上资料copy了一个OnScrollListener给ListView,java
结果当第一个item长度超过一屏,明明尚未到达列表顶部,Scroll事件就被拦截,列表没法滚动,同时启动了刷新。ide
修正代码后,自定义的OnScrollListener以下:spa
/** 因为Listview与下拉刷新的Scroll事件冲突, 使用这个ScrollListener能够避免Listview滑动异常 */ public static class SwpipeListViewOnScrollListener implements AbsListView.OnScrollListener { private SwipeRefreshLayout mSwipeView; private AbsListView.OnScrollListener mOnScrollListener; public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView) { mSwipeView = swipeView; } public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView, OnScrollListener onScrollListener) { mSwipeView = swipeView; mOnScrollListener = onScrollListener; } @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { View firstView = absListView.getChildAt(firstVisibleItem); // 当firstVisibleItem是第0位。若是firstView==null说明列表为空,须要刷新;或者top==0说明已经到达列表顶部, 也须要刷新 if (firstVisibleItem == 0 && (firstView == null || firstView.getTop() == 0)) { mSwipeView.setEnabled(true); } else { mSwipeView.setEnabled(false); } if (null != mOnScrollListener) { mOnScrollListener.onScroll(absListView, firstVisibleItem, visibleItemCount, totalItemCount); } } }