我第一次尝试使用 Kotlin 构建 android 应用程序。
我想在 OnCreate 方法之外的一些按钮上声明,我只能在这个函数内部使用 findViewById 初始化它们。
我可以像在 java 中那样用简单干净的代码声明吗?
private Button btnProceed;
因为在将其转换为 Kotlin 时,它看起来像:
private var btnProceed: Button? = null
然后在初始化OnClick函数的时候需要加上!签到:
btnProceed!!.setOnClickListener
什么是正确和最干净的方法?
最佳答案
这是 lateinit
的一个很好的用例.标记属性 lateinit
允许您使其不可为空,但不会在调用 Activity 的构造函数时为其分配值。当初始化发生在一个单独的初始化方法中,晚于正在运行的构造函数(在本例中为 onCreate
)时,它恰好适用于像 Activity 这样的类。
private lateinit var btnProceed: Button
如果在为其分配实际值之前读取该属性,它将在运行时引发异常 - 通过使用 lateinit
,您有责任在访问它之前对其进行初始化第一次。
否则,如果您希望编译器为您保证安全访问,您可以让 Button
像转换器默认的那样为空。而不是不安全的!!
operator但是,转换器经常使用它,您应该使用 safe call operator您访问特性的位置:
btnProceed?.setOnClickListener { ... }
如果 btnProceed
是非空值,这将进行常规调用,否则不执行任何操作。
最后,您可以查看 Kotlin Android Extensions ,如果它适用于您的项目,则无需为您的 View
创建属性。
关于java - 使用 Kotlin 在 android 中声明 UI 组件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44285703/