Android find child views by class

I needed to get all the buttons that were descendants of a view so I’ve created another small Android utility function to do it.

It returns a list of all child views that are an instance of the specified class (including all the children of child views):

package net.samclarke.android

import android.view.View
import android.view.ViewGroup

object AndroidUtils {
    fun <T : View> getChildViewsByClass(parent: ViewGroup, clazz: Class<T>): ArrayList<T> {
        val children = ArrayList<T>()

        val childCount = parent.childCount
        for (i in 0 until childCount) {
            val child = parent.getChildAt(i)

            if (clazz.isInstance(child)) {
                @Suppress("UNCHECKED_CAST")
                children.add(child as T)
            } else if (child is ViewGroup) {
                children.addAll(getChildViewsByClass(child, clazz))
            }
        }

        return children
    }
}

Comments