使用Anko,可以轻松访问之前定义的组件。例如:
verticalLayout {
val name = editText()
button("Say Hello") {
onClick { ctx.toast("Hello, ${name.text}!") }
}
}
由于编辑文本是在按钮之前定义的,因此它的访问很容易。 但是,当您要访问的组件是在当前元素之后定义的,是当前元素的父元素,或者是当前元素的兄弟元素时,我不知道访问它的简单方法。以下是一些例子:
之后定义的元素
verticalLayout {
button("Say Hello") {
// how to access "name" here?
}
val name = editText()
}
兄弟中定义的元素
verticalLayout {
verticalLayout {
val name = editText()
}
button("Say Hello") {
// how to access "name" here?
}
}
元素是父
val layout = verticalLayout {
button("Say Hello") {
// how to access "layout" here?
}
}
如果我在没有Anko的情况下做同样的事情,使用传统的XML布局文件,我可以简单地用findViewById()
引用那些元素。是否有一种简单的方法可以使用Anko访问它们?
答案 0 :(得分:1)
Since Kotlin 1.2,您可以将lateinit
用于本地变量,这可能是您需要的解决方案,以使您的变量达到所需范围:
之后定义的元素:
verticalLayout {
lateinit var name: EditText
button("Say Hello") {
// use name
}
name = editText()
}
兄弟姐妹中定义的元素:
verticalLayout {
lateinit var name: EditText
verticalLayout {
name = editText()
}
button("Say Hello") {
// use name
}
}
元素是父母:
lateinit var layout: LinearLayout
layout = verticalLayout {
button("Say Hello") {
// use layout
}
}