在Android的UI组件中,ListView是一个非常实用的组件。该组件主要是用于展示大批量的同类数据,比如联系人信息。
而在自定义ListView的样式时,需要重写数据接口的ListAdapter类中的getView函数,以此来定制ListView中每个item的样式。在这里Android系统为了效率的原因引进了ConvertView这一个变量。ConvertView在这里主要的作用就是方便系统在重写UI时,能重用原来实用过的View实例,以此来降低系统资源的消耗和提高代码效率。
但是当你希望根据itemid实现不同的样式时,往往会出现一些意想不到的情况。这主要是因为两方面的原因导致的
- Andorid并不保证getView的执行顺序
- 因为getView的不确定性,导致ConvertView的循序可能是无序的。
简单解释ConvertView就是最近使用过的getView函数返回的实例,但是Andorid是怎样决定使用那个实例传递给本次getView函数的呢?
在经过试验后,我发现关于ConvertView的几点特征。
- 对于一个ListView,Android保存所有曾经生成过的ConvertView实例,直至系统垃圾回收这些实例位置,而不是只保存最后使用的ConvertView对象。
- 这些保存的ConvertView以使用时间顺序排序,并依次被传递到getView函数中。
以一个简单的例子来会更直观,
我有一列String需要展示
String[] content = {"1","