首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin/Android:递归查找T类型的所有视图

Kotlin/Android:递归查找T类型的所有视图
EN

Stack Overflow用户
提问于 2018-10-18 01:44:27
回答 1查看 698关注 0票数 1

因此,我为ViewGroup提供了一个扩展函数:

代码语言:javascript
复制
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))
                }
            }
        }
    }
}

我就是这样用的:

代码语言:javascript
复制
tabs.allViewsOfType<Button> { Log.i("Dale", it.text.toString()) }

但不知怎么不管用。我做错什么了吗?

顺便说一句,tabs是一个包含三个ButtonLinearLayout

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-18 03:55:23

为什么在特定情况下使用afterMeasure

  1. 我刚删除了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)}
  2. Log.i()记录器替换为简单的Kotlin的println(): tabs.allViewsOfType { println("Dale:${it.text}") }
  3. 现在,您的功能运行得很好: I/System.out:戴尔:按钮4戴尔:按钮3戴尔:按钮2戴尔:按钮1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52865769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档