您的位置:首页 > 移动开发 > Android开发

Android中GridView、ListView 的 getChildAt() 方法返回null 解决方案

2017-07-21 10:25 369 查看
最近测试出了一个bug,就是listView里面加载第一页数据时在listView的click事件中获取list中Item的某个子控件时无异常,但是如果一旦进行滑动到下页显示的item复用第一页的item时再获取获取list中Item的某个子控件时出现空指针异常,可以看我打断点调试的数据

position为0获取没有异常



position为6复用了第一页的view



这个问题以前没怎么注意,经过反复调试发现lv.getChildAt(position)方法中的position有诡异所以毫不犹疑就去看了对应的源码,不看不知道,一看吓一跳



也就是说getChildAt(int position)方法中的position指的是当前可见的第几个元素,并不是在listview中的position位置,既然知道了问题那解决也就有方案了,如果要获取当前可见的第几个元素,那么拿到当前的位置减去第一个可见的view的位置不就行了吗?

于是把原来的position改一下

TextView order = (TextView) lv.getChildAt(position).findViewById(R.id.order_number);


再次进行断点调试:



同样是position为6,更改position后获取到的view就是非空了,以后再使用相关方法的时候最好看看相关参数的说明,稍微理解有偏差,就会有问题,以后要多注意
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐