1. 程式人生 > >SwipeRefreshLayout結合ListView使用的時候有時候存在下拉衝突

SwipeRefreshLayout結合ListView使用的時候有時候存在下拉衝突

錯誤分析:

在我們下拉重新整理的時候,就是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);
    }
}
}