View的setTag方法有什么用?

dro*_*tes 5 android

我正在实现一个ListView使用自定义适配器.为了提高性能,我返回新膨胀的Viewif如果convertView为null,否则返回循环使用的View.

现在在这个过程中我使用了ViewHolder模式并使用了该setTag()方法View.最初我认为这是某种书签,但我还没有完全理解它的使用.我已经检查了不同的博客文章,他们只是在代码中使用了它.

有人可以解释一下我使用的setTag()方法吗?

Kni*_*edi 13

基本上你可以将任何类型的对象存储为标记(并在调用时将其强制转换getTag).这可以是简单的ID或一些复杂的数据.这是您与此视图关联的一些信息.

对于列表和视图持有者模式,它是一个简单的对象,其中包含对标记视图(组)的视图的引用.因此,findViewById每次更新视图内容时都不必调用.这只是一次性能优化.

我们可以在视图标签中存储列表项的数据吗?
不会.由于视图回收,您有(例如)10个视图,可以重复使用1000个列表项.在标签中存储数据在这里没有任何意义.最好使用自定义数据对象来存储列表项状态(可能是包含显示数据的相同数组),或者在列表项更改时立即保留它.

另请参见setTag文档.