SwipeRefreshLayout下拉刷新沖突解決

jopen 9年前發布 | 49K 次閱讀 Android開發 移動開發 SwipeRefreshLayout

使用SwipeRefreshLayout,網上資料copy了一個OnScrollListener給ListView,

結果當第一個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;
}

@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);
    }
}

}</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!