冲突来源于 ScrollView 向下滑动的时候会触发 SwipeRefreshLayout 下拉刷新。

解决思路:

根据ScrollView 滑动距离动态处理SwipeRefreshLayout 刷新。

mScrollView.setScrollViewListener(new GradationScrollView.ScrollViewListener() {
@Override
public void onScrollChanged(GradationScrollView scrollView, int x, int y, int oldx, int oldy) {
//y 滚动的高度
//解决 SwipeRefreshLayout 与 ScrollView 滑动冲突
if (y <= 0)
mSwipeRefreshLayout.setEnabled(true);
else
mSwipeRefreshLayout.setEnabled(false);
}
});
  • y是ScrollView 滚动的高度
  • 当y<=0的时候即表示 ScrollView 已经滑到顶部了,这个时候就允许触发下拉刷新
  • 反之亦然


自定义带滑动监听的scrollview

package cn.caihuadadao.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;

/**
* 带滑动监听的scrollview
*/
public class MyScrollView extends ScrollView {

public interface ScrollViewListener {
void onScrollChanged(MyScrollView scrollView, int x, int y, int oldx, int oldy);
}

private ScrollViewListener scrollViewListener = null;

public MyScrollView(Context context) {
super(context);
}

public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public MyScrollView (Context context, AttributeSet attrs) {
super(context, attrs);
}

public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}

@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if (scrollViewListener != null) {
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}

}