我可以通过Kotlin android项目中的xml布局文件中定义的ID直接在活动内部访问我的布局视图(如按钮,TextView,EditText等)。
那么,我们是否需要在kotlin android项目中使用findviewbyId()或butterknife lib?
StudentActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val studentViewModel = getStudentViewModel()
updateButton.setOnClickListener {
val name = nameEditText.text.toString()
val age = ageEditText.text.toString()
val subject = subjectEditText.text.toString()
studentViewModel.updateStudentRecord(
Student(
name,
Integer.parseInt(age),
subject
)
)
}
}
}```
答案 0 :(得分:0)
我想您将不再使用,只要您愿意?但是我认为这不是因为合成访问器,而是因为数据绑定和今年宣布的View Binding
答案 1 :(得分:0)
ButterKnife
是用于视图绑定的旧解决方案。它比以前的findviewbyId
方法具有更少的样板代码,但是由于annotation processors
的影响,它影响了构建时间的速度,并且不提供Null safety
和Type safety
。一个更好的解决方案是您在示例中使用的kotlinx.android.synthetic
,但它也存在一些问题。例如,如果将内容视图设置为布局,然后键入仅在其他布局中存在的ID,则IDE可以自动完成并添加新的import语句。除非开发人员专门检查以确保其import语句仅导入正确的视图,否则没有安全的方法来验证这不会引起运行时问题。由于所有内容都是全局的,因此必须小心以确保它们仅使用期望的视图,而忽略自动完成功能。 DataBinding
和ViewBinding
是目前最好的解决方案。乍一看它们是相似的。两者都生成绑定类,您可以使用它们在支持Null safety
和Type safety
的情况下直接引用视图,但是存在区别:
DataBinding
方法需要您在XML布局中添加<layout>
标签,以启用数据绑定过程ViewBinding
不支持布局变量或布局表达式,因此不能用于将布局与XML数据绑定 ViewBinding
在构建时间上比DataBinding
快,因为它不使用注释处理器。
答案 2 :(得分:0)
不,这是科特林的魔力。只需使用布局文件(xml)中的ID,然后直接使用即可。喜欢:
button.setOnClickListener {}
等等。希望会有所帮助。