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

来源:互联网 发布:淘宝会员号是什么 编辑:程序博客网 时间:2024/05/22 12:00

最近测试出了一个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就是非空了,以后再使用相关方法的时候最好看看相关参数的说明,稍微理解有偏差,就会有问题,以后要多注意
阅读全文
0 0
原创粉丝点击