我知道我可以使用id
Anko 的属性来识别视图:
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
从Activity
a 中创建id
资源(即"@+id/"
)AnkoComponent
?而不是id
在ids.xml
文件中创建每个。