Android中GridView、ListView 的 getChildAt() 方法返回null 问题

在开发Android app时,使用GridView或ListView的getChildAt(int position)方法获取View,未滑动时可正常获取,滑动后会获取到null或有偏移量的View。问题根源是对该方法理解有误,ListView和GridView采用View回收机制,getChildAt的position指当前可见区域ChildView位置,还给出获取第N个ChildView的实现思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  开发的Android app用到了GridView或者ListView,通常使用getChildAt(int position)方法获取当前点击或者选中的View(即position对应的View)。

  当ListView、GridView没有滑动的时候,可以正常地获取到index对应的View;但是当ListView、GridView滑动之后,却获取到null或者一个存在偏移量的View,而并不是想要获取的View。

  问题的根源在于对getChildAt(int position)方法的理解存在错误。ListView和GridView采用了View回收机制。简单来说就是如果屏幕最多可以显示N个ChildView,那么在内存中也就只存在这N个ChildView,当屏幕滚动的时候,第(N+1)个ChildView就会复用第一个View,以此类推。

所以,在GridView和ListView中,getChildAt(int position)方法的参数position指的是当前可见区域中的ChildView位置。

  如果要活的GridView的第N个ChildView,则position就是N减去第一个可见的ChildView的位置,代码实现如下:

  

1

View view = listView.getChildAt(i - listView.getFirstVisiblePosition());

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值