【问题标题】:How to easily access anko components within the layout code如何在布局代码中轻松访问 anko 组件
【发布时间】:2018-03-20 20:55:40
【问题描述】:

使用 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 访问它们的简单方法?

【问题讨论】:

    标签: android kotlin anko


    【解决方案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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多