View的setTag方法有什么用?

时间:2011-11-08 23:15:40

标签: android

我正在使用自定义适配器实现ListView。为了提高效果,如果View为空,我将返回新增的convertView,否则返回已回收的View

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

有人可以解释我使用View方法吗?

1 个答案:

答案 0 :(得分:13)

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

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

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

另见setTag documentation