gpt4 book ai didi

android - 如何引用 Anko DSL 中的其他 View ?

转载 作者:IT老高 更新时间:2023-10-28 13:31:50 25 4
gpt4 key购买 nike

我在我的 Android 项目中使用 Anko,但是当被引用的 View 不在我引用它的同一级别时,我不知道它如何引用我在 DSL 中创建的 subview 。

以下代码有效:

alert {
customView {
val input = textInputLayout {
editText {
hint = "Name"
textColor =resources.getColor(R.color.highlight)
}
}


positiveButton("OK") { "${input.editText.text}" }
}
}.show()

但以下代码不起作用:

alert {
customView {
val vertical = verticalLayout {
textView {
text = "Edit device name"
textColor = resources.getColor(R.color.highlight)
textSize = 24F
}
val input = textInputLayout {
editText {
hint = "Name"
textColor = resources.getColor(R.color.highlight)
}
}
}

positiveButton("OK") { "${vertical.input.editText.text}" } // Cannot resolve "input"
}
}.show()

最佳答案

在我看来,有两种方法。 super hacky 的方法是在 textInputLayout block 中声明正按钮。这是可能的,因为您可以从任何嵌套范围内访问所有外部范围,并且 positiveButton 方法在 alert 范围中声明:

alert {
customView {
verticalLayout {
textInputLayout {
val editText = editText {
hint = "Name"
}

positiveButton("OK") { toast("${editText.text}") }
}
}
}
}.show()

比较简单的方法是声明一个可以从两个作用域访问的变量。但是,您需要将其设为可空,因为您无法立即对其进行初始化:

alert {
var editText: EditText? = null

customView {
verticalLayout {
textInputLayout {
editText = editText {
hint = "Name"
}
}
}
}

positiveButton("OK") { toast("${editText!!.text}") }
}.show()

关于android - 如何引用 Anko DSL 中的其他 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34217789/

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