ScrollView嵌套Listview/RecyclerView内容显示不全

1.起因

最近一个项目中,有一个需求是要在ScrollView中嵌套好几个RecyclerView。然后问题来了,五个RecyclerView(PS:设计太奇葩)中的第二个RecyclerView总是只显示一行数据。这个问题和以前ScrollView嵌套ListView很像,估计是一样的问题。

2.原因

在ScrollView中嵌套嵌套ListView空间,无法正确的计算ListView的大小。但是这里有一点没想明白的是,我嵌套了几个RecyclerView,只有第二个RecyclerView会出现只显示一条数据的情况,其他几个RecyclerView都能正常运行。

3.解决办法

重写RecyclerView的onMeasure方法

 @Override
    protected void onMeasure(int widthSpec, int heightSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
        super.onMeasure(widthSpec, expandSpec);
    }

首先是Integer.MAX_VALUE,32位数,结构如下:
这里写图片描述
Integer.MAX_VALUE的前两位存储的是测量模式,后面的数据才是大小值,也就是2147483647,基本就是无限大小。
然后是测量模式:

MeasureSpec.EXACTLY:精确模式,当设置了宽/高为50dp这种指定值或者为match_parent/fill_parent时就是这种模式。父元素确定了子元素的大小。

MeasureSpec.AT_MOST:最大(至多)模式,在这里设置为了Integer.MAX_VALUE>>2=2147483647,也就是最大不超过这个值,可以小于。

MeasureSpec.UNSPECIFIED:未指定模式,可以得到任意想要的大小。

总结:重写Listview/RecyclerView的onMeasure方法,通过最大测量模式得到值为Integer.MAX_VALUE>>2的值,将该值设为Listview/RecyclerView的高度,因为这个数值很大,因此可以直接将Listview/RecyclerView的内容全部显示完。

缺点:使用这种方式虽然解决了问题,但是当Listview/RecyclerView的数据量很大的时候,会导致数据一次加载完,失去了Listview/RecyclerView复用的优势。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值