RecyclerView 如何正确地获取子View对象、item的数量和View对应的position

RecyclerView是我们用到比较频繁的控件之一,有时获取某个子View或其对应的position时往往达不到预期的结果。

之前写的这个万能分割线XRecyclerViewDivider也遇到了这些问题,接下来详细说下几个方法的意义吧。


  1. RecycleView的getChildAt(position)

这个方法在RecycleView未满一屏的时候是没有问题的,可以正确地拿到position对应地View,但是在满一屏地情况下,getChildAt(position)获取的View是null。

因为getChildAt(position)这个方法其实只能get到当前屏幕所展示的view。

  1. RecycleView的getChildCount()

用这个方法去遍历Item的时候,往往会发现返回item的数量与实际数量不相符,这是为什么呢?

getChildCount()实际上返回的是整数的可见的item数量,所以导致和实际的数量不一致,这个方法一般会和getChildAt(int index)一起使用的,它们的意义是一一对应的,都和可见View有关系。

  1. RecyclerView适配器getAdapter().getItemCount()

RecyclerView适配器的getItemCount()是可以正确获取到全部的item数量的,不管item是否可见,要想获取子View我们可以遍历item来获取,这样也是可以的。

  1. LayoutManager的findViewByPosition(position)

如果要获取position下的子View,我们可以用LayoutManager的findViewByPosition(position)方法,因为LayoutManager是RecyclerView的布局管理器,其子View的布局都归LayoutManager管理。

所以我们可以使用此方法获取当前position下对应的View。

  1. 获取正确的position

要想获取正确的position,我们可以采用3的item遍历方法,如果知道了View实例,也可采用如下方法:

RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
//这个才是真正的layout position
int itemPosition = params.getViewLayoutPosition();

上面讲诉了几个方法的意义,我们可以灵活使用这几个方法来获取我们想要的RecyclerView的子View对象、item数量和View对应的position。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄小梁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值