Android | Get all children elements of a ViewGroup

 If you want to get all the child views, as well as the views within children ViewGroups, you must do it recursively, since there is no provision in the API to do this out of the box.

private ArrayList<View> getAllChildren(View v) {

    if (!(v instanceof ViewGroup)) {
        ArrayList<View> viewArrayList = new ArrayList<View>();
        viewArrayList.add(v);
        return viewArrayList;
    }

    ArrayList<View> result = new ArrayList<View>();

    ViewGroup viewGroup = (ViewGroup) v;
    for (int i = 0; i < viewGroup.getChildCount(); i++) {

        View child = viewGroup.getChildAt(i);

        ArrayList<View> viewArrayList = new ArrayList<View>();
        viewArrayList.add(v);
        viewArrayList.addAll(getAllChildren(child));

        result.addAll(viewArrayList);
    }
    return result;
}

Yes, it is possible to access all children of a ViewGroup without doing nested loops by using a recursive function. Here is an example implementation in Kotlin:

kotli
fun getAllChildren(parent: ViewGroup): List<View> { val allChildren = mutableListOf<View>() for (i in 0 until parent.childCount) { val child = parent.getChildAt(i) allChildren.add(child) if (child is ViewGroup) { allChildren.addAll(getAllChildren(child)) } } return allChildren }

This function takes a ViewGroup as input and returns a list of all its children, including children of children, and so on. It uses a recursive approach where it first adds all direct children of the input ViewGroup to a list, and then recursively calls itself on any child that is also a ViewGroup.

To use this function, simply pass in the ViewGroup you want to get all children for:

scss
val allChildren = getAllChildren(myViewGroup)

The allChildren list will contain all the children of the myViewGroup, in the order they appear in the view hierarchy.

Comments

Most Popular

PhpStorm, return value is expected to be 'A', 'object' returned

Remove Unicode Zero Width Space PHP

Laravel file upload returns forbidden 403, file permission is 700 not 755