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