gpt4 book ai didi

android - Kotlin/Android:递归查找所有T型 View

转载 作者:行者123 更新时间:2023-12-02 13:37:35 25 4
gpt4 key购买 nike

所以我对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是一个 LinearLayout,其中包含三个 Button

最佳答案

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

  • 我刚刚删除了afterMeasure:
    inline fun <reified T : View> ViewGroup.allViewsOfType(action: (T) -> Unit) {
    val views = Stack<View>()

    views.addAll((0 until childCount).map(this::getChildAt))

    while (!views.isEmpty()) {
    views.pop().let {
    if (it is T) action(it)
    if (it is ViewGroup) {
    views.addAll((0 until childCount).map(this::getChildAt))
    }
    }
    }
    }
  • 用简单的Kotlin的Log.i()替换了println()记录器:
    tabs.allViewsOfType<Button> {
    println("Dale: ${it.text}")
    }
  • 现在您的函数可以正常工作:
    I/System.out: Dale: Button 4
    Dale: Button 3
    Dale: Button 2
    Dale: Button 1
  • 关于android - Kotlin/Android:递归查找所有T型 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52865769/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com