因此,我为ViewGroup提供了一个扩展函数:
inline fun <reified T : View> ViewGroup.allViewsOfType(action: (T) -> Unit)
{
val views = Stack<View>()
afterMeasured {
views.addAll((0 until childCount).map(this::getChildAt))
}
while (!views.isEmpty()) {
views.pop().let {
if (it is T) action(it)
if (it is ViewGroup) {
afterMeasured {
views.addAll((0 until childCount).map(this::getChildAt))
}
}
}
}
}我就是这样用的:
tabs.allViewsOfType<Button> { Log.i("Dale", it.text.toString()) }但不知怎么不管用。我做错什么了吗?
顺便说一句,tabs是一个包含三个Button的LinearLayout。
发布于 2018-10-18 03:55:23
为什么在特定情况下使用afterMeasure?
afterMeasure:
内联乐趣ViewGroup.allViewsOfType(动作:(T) -> Unit) { val views = Stack() views.addAll(0到childCount ).map(这里::getChildAt);而(!views.isEmpty()) { views.pop().let {如果(它是T) action (it ) if (它是ViewGroup) {views.addAll(0直到childCount)).map(这里::getChildAt)}Log.i()记录器替换为简单的Kotlin的println():
tabs.allViewsOfType { println("Dale:${it.text}") }https://stackoverflow.com/questions/52865769
复制相似问题