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。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值