我知道我可以使用idAnko 的属性来识别视图:
class MainActivityUI : AnkoComponent<MainActivity> {
override fun createView(ui: AnkoContext<MainActivity>) = with(ui) {
frameLayout {
textView {
id = R.id.text
}
}
}
}
然后在Activity使用find()函数(或使用 Kotlin Android Extensions)中获取它:
class MainActivity : AppCompatActivity() {
private val textView by lazy {
find<TextView>(R.id.text)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MainActivityUI().setContentView(this)
textView.text = "Hello World"
}
}
但我觉得我错过了什么;自述文件中唯一提到该find功能或 Kotlin Android 扩展的地方是标题为Supporting Existing Code的部分:
你不必用 Anko 重写你所有的 UI。您可以保留用 Java 编写的旧类。此外,如果您出于某种原因仍想(或必须)编写 Kotlin 活动类并扩展 XML 布局,则可以使用 View 属性,这会使事情变得更容易:
// Same as findViewById(), simpler to use val name = find<TextView>(R.id.name) name.hint = "Enter your name" name.onClick { /*do something*/ }您可以使用 Kotlin Android Extensions 使您的代码更加紧凑。
这使得该函数看起来find仅用于支持“旧”XML 代码。
所以我的问题是这样的;使用 anid和find函数是View从Activity使用 Anko 访问 a 的正确方法吗?有没有更“Anko”的方式来处理这个问题?还是我错过了 Anko 的其他一些好处,使View从Activity无关紧要的访问?
第二个相关问题;如果这是从中访问 a 的正确方法,有没有办法View从Activitya 中创建id资源(即"@+id/")AnkoComponent?而不是id在ids.xml文件中创建每个。