今天遇到个需求ScrollRiew中嵌套RecycleView,RecycleView位于ScrollView的底部,现在要做的是上拉加载更多,本来想直接从RecycleView着手,监听RecycleView的显示的最后一个条目,判断是否添加数据,但是为了解决ScrollView嵌套RecycleView的问题,重写了LinearLayoutManager,让RecycleView直接展示所有条目,所以怎么判断都是最后一天,无法实现;所以改为监听ScrollView的滑动到底部:
监听ScrollView是否滑动到底部的方法一:重写onScrollChanged方法
这个方法无法直接访问重写一下需要,直接上代码
import android.widget.ScrollView;
import android.content.Context;
import android.util.AttributeSet;
/**
* Created by linshuai on 2017/11/27.
*/
public class MyScrollview extends ScrollView {
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);
}
}
}
写一个接口
public interface ScrollViewListener {
void onScrollChanged(MyScrollview scrollView, int x, int y, int oldx, int oldy);
}
然后在你的activity里
mScrollView.setScrollViewListener(new ScrollViewListener() {
@Override
public void onScrollChanged(MyScrollview scrollView, int x, int y, int oldx, int oldy) {
View childAt = scrollView.getChildAt(0);
int childHeight = childAt.getHeight();//获取子控件高度
int height = scrollView.getHeight();//获取Scrollview的控件高度
if(y+height == childHeight){//判断条件 当子控件高度=Scrollview的控件高度+x的时候控件到达底部
handler.sendEmptyMessageDelayed(0,1000);
}
LogUtil.e("y:"+y+"------height4:"+childHeight+"------height"+height);
}
});
亲测此方法有用
方法二:重写onOverScrolled方法:
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX,
boolean clampedY) {
// TODO Auto-generated method stub
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
}
onOverScrolled方法也是有四个参数 第一个参数为距离远点的X轴的距离
第二个参数为距离远点的Y轴的距离
第三个参数当ScrollView滑动到左侧边界的时候值为true
第四个参数当ScrollView滑动到下边界的时候值为true
此方法我没有亲测但估计也管用,用的方法和上边差不多。只不过交由系统来做判断,可能不太灵活。