Kevin Parker
Kevin Parker

Reputation: 17206

Find all views with tag?

I am looking to find all the views in a specified activity that have the tag "balloon" for example then hide them using setVisibility to GONE.

Does anyone know how to retrieve a list of views with a given tag?

Upvotes: 44

Views: 38987

Answers (4)

CookieMonster
CookieMonster

Reputation: 1833

You could set tags to your views in this way:

someView.setContentDescription("MyTag");

And then in order to find all views with that tag you need to call:

ArrayList<View> outputViews = new ArrayList<>();
rootView.findViewsWithText(outputViews, "MyTag", FIND_VIEWS_WITH_CONTENT_DESCRIPTION); 

Upvotes: 11

Shlomi Schwartz
Shlomi Schwartz

Reputation: 8903

Here you go:

private static ArrayList<View> getViewsByTag(ViewGroup root, String tag){
    ArrayList<View> views = new ArrayList<View>();
    final int childCount = root.getChildCount();
    for (int i = 0; i < childCount; i++) {
        final View child = root.getChildAt(i);
        if (child instanceof ViewGroup) {
            views.addAll(getViewsByTag((ViewGroup) child, tag));
        }

        final Object tagObj = child.getTag();
        if (tagObj != null && tagObj.equals(tag)) {
            views.add(child);
        }

    }
    return views;
}

I've already answered it here :Android - how to find multiple views with common attribute

Upvotes: 67

nicktmro
nicktmro

Reputation: 2288

Could this API call View#findViewWithTag help? Please note that it only returns one view...

Look for a child view with the given tag. If this view has the given tag, return this view.

Upvotes: 4

Samuh
Samuh

Reputation: 36484

One approach would be to start with the parent ViewGroup, loop through its children(and their children and so on) and then check tags on each one of them.

Upvotes: 6

Related Questions