小编典典

View 的 setTag() getTag() 方法的主要目的是什么?

all

setTag()此类方法和类型对象getTag()的主要目的是什么?View

我是否认为我可以将任意数量的对象与单个视图相关联?


阅读 97

收藏
2022-03-17

共1个答案

小编典典

假设您生成了一堆相似的视图。您可以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只有一个参数 a View,并且它必须从封闭范围内的实例变量或最终局部变量中获取其他信息。我们真正想要的是 从视图本身
中获取信息。

输入getTag/ setTag

button1.setTag(1);
button2.setTag(2);

现在我们可以为每个按钮使用相同的 OnClickListener:

listener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        doAction(v.getTag());
    }
};

这基本上是视图拥有 记忆 的一种方式。

2022-03-17