3 回答
![?](http://img1.sycdn.imooc.com/533e4d00000171e602000200-100-100.jpg)
TA贡献1809条经验 获得超8个赞
OnClickListener
button1.setOnClickListener(new OnClickListener ... );button2.setOnClickListener(new OnClickListener ... ); ...
onClick
public void onClick(View v) { doAction(1); // 1 for button1, 2 for button2, etc.}
onClick
View
getTag
/setTag
:
button1.setTag(1);button2.setTag(2);
listener = new OnClickListener() { @Override public void onClick(View v) { doAction(v.getTag()); }};
![?](http://img1.sycdn.imooc.com/545868b60001587202200220-100-100.jpg)
TA贡献1859条经验 获得超6个赞
get/setTag(Object)
对于其他开发人员来说,您设计的要作为标记存储在视图中的内容并不明显。setTag/getTag方法根本不是描述性的。 它只存储一个 Object
,所以它需要在您想要的时候进行强制转换。 getTag
..稍后,当您决定更改标记中存储对象的类型时,可能会发生意外的崩溃。 这是现实生活中的故事。我们有一个相当大的项目,有很多适配器,带有视图的异步操作等等。一位开发商决定 set/getTag
在他的部分代码中,但是另一个已经为这个视图设置了标记。最后,有人找不到自己的标签,非常困惑。我们花了好几个小时才找到窃听器。
setTag(int key, Object tag)
在Android4.0之前,View.setTag(int,Object)的实现将把对象存储在静态映射中,其中的值被强烈引用。这意味着,如果对象包含指向上下文的任何引用,上下文(指向几乎所有其他内容)将泄漏。如果传递视图,视图将提供对创建视图的上下文的引用。类似地,视图持有者通常包含视图,游标有时也与视图相关联。
![?](http://img1.sycdn.imooc.com/545850200001359c02200220-100-100.jpg)
TA贡献1943条经验 获得超7个赞
setTag()
getTag()
setTag()
Object
getTag()
Object
.
Person p = new Person();p.setName("Ramkailash");p.setId(2000001);button1.setTag(p);
- 3 回答
- 0 关注
- 829 浏览
添加回答
举报