Android 安卓:使用视图';s setTag()属性?

Android 安卓:使用视图';s setTag()属性?,android,views,Android,Views,因为Java使用对象引用,而不是对象本身,是什么阻止我使用setTag()用整个对象而不是对象的属性来标记视图?在getTag()调用之后,尝试解析其中一个属性时,这只是属性查找时间,还是我应该关心其他任何特定的事情 至于我的具体问题,我使用的是一个自定义listview,它有一个imageview和一个textview。最初,我将listview绑定到一个自定义适配器以获取一些xml数据,然后在每个项目的xml中使用某些标记来填充我的listview。因此,我所指的“整个对象”是一个项的整个X

因为Java使用对象引用,而不是对象本身,是什么阻止我使用setTag()用整个对象而不是对象的属性来标记视图?在getTag()调用之后,尝试解析其中一个属性时,这只是属性查找时间,还是我应该关心其他任何特定的事情


至于我的具体问题,我使用的是一个自定义listview,它有一个imageview和一个textview。最初,我将listview绑定到一个自定义适配器以获取一些xml数据,然后在每个项目的xml中使用某些标记来填充我的listview。因此,我所指的“整个对象”是一个项的整个XML的解析版本…

setTag(object)方法最常用的用法之一就是保留对类实例的引用-如果您使用了自定义
列表视图和自定义
适配器
,您应该了解ViewHolder图案

我不知道你的特殊问题,我会说——这有时是危险的吗?是的,如果不负责任地使用。这是否意味着你应该不惜一切代价避免它?不,绝对不是

编辑:为什么要将视图的解析数据绑定到它们

您真的需要它吗,或者您可以填充某种类型的模型?如果您想在上下文中访问视图的标记,而您的视图没有相同的含义/位置(就像我们最喜欢的ViewHolder示例中的
convertView
那样),我认为使用标记是可以的


否则,我相信,如果您再仔细考虑一下,您会发现另一种方法更适合您的问题。

有两种用于settag的api,一种是just value,另一种是key and value。第一个api非常安全,但在使用第二个api时需要非常小心

java Android在View.java内部维护一个到稀疏数组的静态hashmap映射视图。在settag中传递的键和值存储在稀疏数组中。有两件重要的事情需要考虑

首先,不要保存对活动有任何引用的值对象。这将导致内存泄漏,因为活动将具有来自值的强引用,而值具有来自View.class维护的静态hashmap的强引用

其次,每次在内部查找gettag都必须查找hashmap和稀疏数组。这不是很有效

谢谢
苏里亚。

是的。我听说过取景器图案。谢谢那是一种解脱。。。关于我的问题,我刚刚更新了上面的问题…只是项目描述会根据查看的项目不断变化。因此,如果我必须向意图传递一些信息,我需要一些关于正在考虑的特定项目的额外信息。当然,我认为我夸大了,说我会通过整个项目,但只有一个或两个属性对我来说是好的。但是,我只是想从性能的角度了解。。。谢谢你的回复。。。