这个问题找了好几天,网上没有直接的答案,今天写在这里希望能帮到人,刚写博客,样式什么的就不看了,简单易懂好粘贴才是你们需要的!
不对的地方请在评论指正,谢谢!
首先说下ListView,GridView和ScrollVIew嵌套问题,自定义一个ListView或GridView,重写onMeasure()方法两行代码解决问题
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO 自动生成的方法存根
int expandSpec = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
代码使用直接粘贴就OK
这个代码解决了嵌套滑动冲突的问题,原理是这个代码禁用了ListView或GridView本身的滑动功能,强制它们的item全部显示。
那么问题来了:ListView的滑动监听怎么办?上拉加载呢?
答案是:没有滑动,监听无效,因此你想实现上拉加载需要靠ScrollView的滑动监听来做。
但ScrollView本身是没有监听事件的,所以,你只能自定义了。
在ScrollView中有个方法,onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) 这个方法有四个参数
这个方法是没有暴露出来的所以需要自己写个接口调用在自定义ScrollView中添加以下方法
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
if (scrollY>0&&onScrollToBottomListener!=null){
onScrollToBottomListener.onScrollBottomListener(clampedY);
}
}
public void setOnScrollToBottomLintener(OnScrollToBottomListener listener){
onScrollToBottomListener = listener;
}
public interface OnScrollToBottomListener {
void onScrollBottomListener(boolean isBottom);
}
然后在用的地方调用就可以
没有源码,没有Demo,你需要的只是Ctrl+C和Ctrl+V。