如何轻松访问布局代码中的anko组件

时间:2018-03-20 12:41:44

标签: android kotlin anko

使用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访问它们?

1 个答案:

答案 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
    }
}