解决SwipeRefreshLayout嵌套ListView滑动冲突

1,728 阅读1分钟

1.对我有效的解决方案

给listview设置setOnScrollListener,重写它的两个方法

lvHome.setOnScrollListener(new AbsListView.OnScrollListener() {

     @Override
     public void onScrollStateChanged(AbsListView view, int scrollState) {
     //解决SwipeRefreshLayout嵌套listview的滑动冲突
     //判断ListView是否滑动到第一个Item的顶部
     if (view.getChildCount() > 0 && view.getFirstVisiblePosition() == 0
        && view.getChildAt(0).getTop() >= view.getPaddingTop()) {
        //解决滑动冲突,当滑动到第一个item,下拉刷新才起作用
        bindingView.mSwipeLayout.setEnabled(true);
     } else {
        bindingView.mSwipeLayout.setEnabled(false);
     }
}

2.网上也有另外一种方案,但我试了没有效果

mSwipeLayout.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
    @Override
    public void onScrollChanged() {
        bindingView.mSwipeLayout.setEnabled(bindingView.lvHome.getScrollY() == 0);
    }
});