我正在尝试首次使用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
,您有责任在首次访问它之前对其进行初始化。
否则,如果希望编译器为您保证安全访问,则可以使Button
null为默认值,就像转换器所做的那样。但是,应该使用安全调用运算符来访问该属性,而不要使用转换器通常使用的不安全!!
运算符:
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中我要做的是: