SwipeRefreshLayout下拉刷新冲突解决

使用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);
        }
    }
}
相关文章
相关标签/搜索