ListView,GridView和ScrollVIew嵌套实现上拉加载更多

这个问题找了好几天,网上没有直接的答案,今天写在这里希望能帮到人,刚写博客,样式什么的就不看了,简单易懂好粘贴才是你们需要的!

不对的地方请在评论指正,谢谢!

首先说下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。



猜你喜欢

转载自blog.csdn.net/mountain_eyes/article/details/53163273