I have a layout with multiple ImageView
s, some of those images need to have the same onClickListener. I would like my code to be flexible and to be able to get a collection of those View
s, iterate and add the listeners at run-time.
Is there a method like findViewById
that will return a collection of View
s rather than just a single one?
I've finally wrote this method (Updated thanks to @SuitUp (corrected username)):
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; }
It will return all views that have android:tag="TAG_NAME"
attribute. Enjoy ;)
Shlomi Schwartz's method has one flaw, it does not collect Views
wchich are ViewGroups
. Here is my fix:
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; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With