如何在布局代码中轻松访问 anko 组件
How to easily access anko components within the layout code
使用 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 访问它们的简单方法?
Since Kotlin 1.2, you can use 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
}
}
使用 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 访问它们的简单方法?
Since Kotlin 1.2, you can use 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
}
}