我们应该在Kotlin Android项目中使用butterknife还是findViewById(),因为我们可以通过id直接访问视图

时间:2019-10-15 12:33:50

标签: android kotlin butterknife

我可以通过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
                    )
                )

    }
}
}```

3 个答案:

答案 0 :(得分:0)

我想您将不再使用,只要您愿意?但是我认为这不是因为合成访问器,而是因为数据绑定和今年宣布的View Binding

答案 1 :(得分:0)

ButterKnife是用于视图绑定的旧解决方案。它比以前的findviewbyId方法具有更少的样板代码,但是由于annotation processors的影响,它影响了构建时间的速度,并且不提供Null safetyType safety。一个更好的解决方案是您在示例中使用的kotlinx.android.synthetic,但它也存在一些问题。例如,如果将内容视图设置为布局,然后键入仅在其他布局中存在的ID,则IDE可以自动完成并添加新的import语句。除非开发人员专门检查以确保其import语句仅导入正确的视图,否则没有安全的方法来验证这不会引起运行时问题。由于所有内容都是全局的,因此必须小心以确保它们仅使用期望的视图,而忽略自动完成功能。 DataBindingViewBinding是目前最好的解决方案。乍一看它们是相似的。两者都生成绑定类,您可以使用它们在支持Null safetyType safety的情况下直接引用视图,但是存在区别:

  • DataBinding方法需要您在XML布局中添加<layout>标签,以启用数据绑定过程
  • ViewBinding不支持布局变量或布局表达式,因此不能用于将布局与XML数据绑定

ViewBinding在构建时间上比DataBinding快,因为它不使用注释处理器。

答案 2 :(得分:0)

不,这是科特林的魔力。只需使用布局文件(xml)中的ID,然后直接使用即可。喜欢:             button.setOnClickListener {} 等等。希望会有所帮助。