Reputation: 17206
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
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
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
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
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