SwipeRefreshLayout結合ListView使用的時候有時候存在下拉衝突
阿新 • • 發佈:2019-01-24
錯誤分析:
在我們下拉重新整理的時候,就是listView不能向下滑動了造成了重新整理的問題,這是因為我嵌套了一個ScrollView, 結果當第一個item長度超過一屏,明明還沒有到達列表頂部,Scroll事件就被攔截,列表無法滾動,同時啟動了重新整理。
解決方法:
自定義onScrollListener
/* 由於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; } @Overridepublic void onScrollStateChanged(AbsListView absListView, int i) { } @Overridepublic 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); } } }