【发布时间】:2018-02-15 16:34:06
【问题描述】:
我正在尝试创建一个通用扩展函数,它可以遍历 Android 视图层次结构并返回特定类型视图的第一次出现。
我们的想法是按如下方式调用扩展(在parentView 中查找Toolbar 的第一次出现):
val someView = parentView.findFirstChildRecursive<Toolbar>()
很遗憾,下面的代码无法编译。我猜 Kotlin 对递归内联函数不满意,但是如果不内联函数,我就不能使用具体类型。
inline fun <reified T> View.findFirstChildRecursive(): T? {
when (this) {
is T -> return this
is ViewGroup -> {
for (i in 0 until childCount) {
getChildAt(i).findFirstChildRecursive<T>()?.let { return it }
}
}
}
return null
}
我是一个 Kotlin 新手,所以我希望有人能解释原因或提出一个好的解决方案?
【问题讨论】:
-
提供的答案有帮助吗?
-
@VictorRendina 你有没有找到解决方案?我也在尝试做同样的事情。
-
@portfoliobuilder 请在下面查看我的答案,了解一种潜在的解决方案
标签: android kotlin kotlin-extension