当前位置: 首页 > 面试题库 >

用Kotlin在android中的UI组件上声明的最佳方法是什么?

马嘉勋
2023-03-14
问题内容

我正在尝试首次使用Kotlin构建android应用程序

我想在OnCreate方法外的某些按钮上声明,并且只能在带有findViewById的此函数内对其进行初始化。

我可以像Java中那样用简单干净的代码声明吗?

private Button btnProceed;

因为当将其转换为Kotlin时,它看起来像:

private var btnProceed: Button? = null

然后在初始化OnClick函数时需要添加!标志:

btnProceed!!.setOnClickListener

什么是正确和最清洁的方法?


问题答案:

这是一个很好的用例lateinit。标记属性lateinit可以使它成为不可为空的,但在调用Activity的构造函数时不为其赋值。正是在像Activity之类的类中,当初始化是在单独的初始化方法中发生,而不是在构造函数运行之后(在本例中为onCreate)时。

private lateinit var btnProceed: Button

如果在分配实值之前读取了该属性,它将在运行时引发异常-通过使用lateinit,您有责任在首次访问它之前对其进行初始化。

否则,如果希望编译器为您保证安全访问,则可以使Buttonnull为默认值,就像转换器所做的那样。但是,应该使用安全调用运算符来访问该属性,而不要使用转换器通常使用的不安全!!运算符:

btnProceed?.setOnClickListener { ... }

如果btnProceed为非null值,则将进行常规调用,否则不执行任何操作。

最后一点,您可以查看Kotlin Android扩展View,如果它适用于您的项目,则无需完全为您创建属性。

上一次编辑(目前):您还应该lazy按照中所述使用。懒惰很酷。other
answers



 类似资料:
  • 本文向大家介绍在JavaScript中声明多个变量的最佳方法是什么?,包括了在JavaScript中声明多个变量的最佳方法是什么?的使用技巧和注意事项,需要的朋友参考一下 当然,以下声明多个变量的方法更有效: 假设您需要添加,删除或更新变量,则可以轻松实现。 但是使用以下方法,您需要做更多更改。例如,在删除变量时,您需要删除分号。如果是第一个,则需要将var添加到第二个变量。

  • 问题内容: 好吧,这并不是一个问题,因为我并没有真正“卡住”我的代码,但是我发现Android API在访问外部存储设备和File.createTempFile()方法方面有些奇怪的行为, d想了解正在发生的事情… 请注意,我的清单 中不 包含。 第1部分 : 我有以下代码,它 确实可以 发挥作用: 它会为我创建一个临时文件,并且我可以毫无问题地在其中写入数据。 问题1 :为什么该功能有效,因为我

  • 问题内容: 我正在Android应用程序中创建第一个Kotlin类。通常出于记录目的,我有一个名为name的常量。我在Java中要做的是: 我知道在Kotlin类中可以使用以下方式创建: 这对于使用Java和Kotlin的项目是可以的,但是如果我启动仅在Kotlin中的新项目该怎么办?如何定义常数?在我没有这种奇怪构造的情况下,还有更多的科特林方式吗? 问题答案: 通常,常量是所有大写字母(例如F

  • 我想知道我应该传递什么作为参数:var还是val?我应该添加私人修改吗?在哪种情况下是最佳实践?因为当我添加getter时,我必须将其改为var,但正如我所知,用Kotlin写val总是更好?

  • 问题内容: 我得到了一种用于创建,读取,更新和删除的表单。我用相同的形式创建了3个组件,但它们传递了不同的道具。我得到了CreateForm.js,ViewForm.js(带有删除按钮的只读)和UpdateForm.js。 我以前使用过PHP,所以我总是以一种形式进行操作。 我使用React和Redux来管理商店。 当我进入CreateForm组件时,我将这些道具传递给子组件,以使其不使用值填充输

  • 我正在Android应用程序中创建我的第一个Kotlin类。通常出于日志记录的目的,我有一个名为的常量。在Java中我要做的是: