What is the main purpose of setTag() getTag() methods of View?

android, android-view, android-viewholder, view

Solution

Let's say you generate a bunch of views that are similar. You could set an `OnClickListener` for each view individually:

button1.setOnClickListener(new OnClickListener ... );
button2.setOnClickListener(new OnClickListener ... );
 ...

Then you have to create a unique `onClick` method for each view even if they do the similar things, like:

public void onClick(View v) {
    doAction(1); // 1 for button1, 2 for button2, etc.
}

This is because `onClick` has only one parameter, a `View`, and it has to get other information from instance variables or final local variables in enclosing scopes. What we really want is to get information from the views themselves.

Enter `getTag`/`setTag`:

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

Now we can use the same OnClickListener for every button:

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

It's basically a way for views to have memories.

Problem

What is the main purpose of such methods as `setTag()` and `getTag()` of `View` type objects? Am I right in thinking that I can associate any number of objects with a single View?

Original source