冲突来源于 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); } } }