当前位置: 首页 > 知识库问答 >
问题:

我们应该使用Butternife或findViewById()与Kotlin Android项目,因为我们可以通过id直接访问视图

邓德本
2023-03-14

我能够访问我的布局视图(如button、TextView、EditText等)直接在活动内部由他们的ID定义在布局xml文件在Kotlin android项目。

那么,我们需要在kotlin android项目中使用findviewbyId()或Butternife 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
                    )
                )

    }
}
}```

共有1个答案

宣瀚
2023-03-14

Butternife是一种用于视图绑定的旧解决方案。与旧的findviewbyid方式相比,它有更少的样板代码,但是由于注释处理器,它会影响构建时间速度,并且不提供null安全性type安全性。一个更好的解决方案是您在示例中使用的kotlinx.android.synthetic,但它也存在一些问题。例如,如果将内容视图设置为布局,然后键入仅存在于不同布局中的id,IDE允许您自动完成并添加新的import语句。除非开发人员专门检查以确保他们的import语句只导入正确的视图,否则没有安全的方法来验证这不会导致运行时问题。因为一切都是全局的,所以必须小心确保他们只使用他们期望的视图,而忽略自动完成。databindingviewbinding是目前最好的解决方案。乍一看他们很相似。两者都生成绑定类,您可以使用这些绑定类直接引用视图,支持空安全类型安全,但存在差异:

  • 数据绑定方法需要向XML布局添加 标记,以便启用数据绑定过程
  • viewbinding不支持布局变量或布局表达式,因此不能用于将布局与XML中的数据绑定

viewbinding在构建时比databinding快,因为它不使用注释处理器。

 类似资料:
  • 哈希集由哈希映射支持。从它的JavaDoc: 这个类实现了Set接口,由哈希表(实际上是一个HashMap实例)支持 在查看源时,我们还可以看到它们之间的关系: 因此,一个<code>哈希集 使用而不是,不是更有效吗?进一步考虑的是,如果环境允许使用而不是,我们是否应该完全放弃,直接使用。 触发这些想法的基本问题是以下情况:我有一组具有以下属性的对象: 大型对象集合 如何有效地检查集装箱? 我想到

  • 我正在使用BeautifulSoup刮取一个URL,并使用以下代码查找标记,其类为: 现在,在上面的代码中,我们可以使用获取标记和与它们相关的信息,但我想使用XPath。是否可以将XPath与BeautifulSoup一起使用?如果可能,请给我提供示例代码。

  • 问题内容: 我们如何或可以通过nte与Meteor一起使用节点模块? 还是依赖于包装API的东西? 还是有建议的处方方法? 问题答案: Meteor 1.3(于2016年3月28日发布)为应用程序提供了完整的ES6(ES2015)模块支持以及现成的NPM支持。应用程序和程序包现在可以直接,轻松地在客户端和服务器上加载NPM模块。 如果可以使用1.3,请检查http://guide.meteor.c

  • 问题内容: 问题答案: 您可以通过以下方式之一: 在依赖项中,您可以将其他项目添加到您的项目中。右键单击项目->属性-> Java构建路径->项目。在此处添加您的项目。 要么 将项目类放入jar,并将其添加到其他项目中 依赖关系应添加到类路径中 在运行时,请确保在两种情况下,都将引用项目的JAR文件添加到类路径中。

  • 我有一个桌面应用程序,可以在REST界面上使用GMAIL API阅读邮件。我想使用服务帐户,这样我们就可以下载邮件使用域设置和用户交互是空的。我成功地创建了Gmail服务实例,但当我尝试访问任何Gmail API方法,比如获取邮件列表或任何其他方法时,我会遇到一个异常,说: 谷歌。API。啊。OAuth2。响应。TokenResponseException:错误:“访问被拒绝”,描述:“请求的客户

  • 问题内容: 通过它的外观- 似乎创建了一个对象的克隆。如果是这样的话,那么与实现Cloneable接口有关的担忧(只有不可变对象才是新对象,因为可变对象复制了引用)是最好的,为什么? 昨天我实现了cloneable,然后意识到我必须对非 String / Primative 元素提供自己的修改。然后,我被告知我正在使用哪个。两种实现似乎都提供了类似的功能。 谢谢 问题答案: Josh Bloch提