SwipeRefreshLayout 嵌套PullToRefreshListView下拉刷新冲突解决

来源:互联网 发布:质谱数据库 编辑:程序博客网 时间:2024/04/25 15:50

SwipeRefreshLayout 嵌套PullToRefreshListView ,当我往下滑动一定距离,然后想往上滑动时,发现scroll事件已经被SwipeRefreshLayout拦截,解决办法如下:

一、实现OnScrollListener接口

/** 由于PullToRefreshListView与下拉刷新的Scroll事件冲突, 使用这个ScrollListener可以避免PullToRefreshListView滑动异常 */public class SwpipeListViewOnScrollListener implements AbsListView.OnScrollListener  {    private SwipeRefreshLayout mSwipeView;    private AbsListView.OnScrollListener mOnScrollListener;    public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView) {        mSwipeView = swipeView;    }    public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView,AbsListView.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);        }    }}


二、给PullToRefreshListView设置ScrollListener

SwpipeListViewOnScrollListener scrollListener = new SwpipeListViewOnScrollListener(swiperefreshlayout); refreshListView.setOnScrollListener(scrollListener);



0 0
原创粉丝点击