- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我第一次尝试使用 Kotlin 构建 android 应用程序。
我想在 OnCreate 方法之外的一些按钮上声明,我只能在这个函数内用 findViewById 初始化它们。
我可以像在 java 中那样用简单干净的代码声明吗?
private Button btnProceed;
因为将它转换为 Kotlin 时它看起来像:
private var btnProceed: Button? = null
然后在初始化OnClick函数的时候需要加上!签名:
btnProceed!!.setOnClickListener
什么是正确且最干净的方法?
最佳答案
这是 lateinit
的一个很好的用例.标记属性 lateinit
允许您使其不可为 null,但不会在调用 Activity 的构造函数时为其分配值。它恰好适用于像 Activity 这样的类,当初始化发生在单独的初始化方法中时,晚于运行构造函数(在本例中为 onCreate
)。
private lateinit var btnProceed: Button
如果属性在实际值分配给它之前被读取,它将在运行时抛出异常 - 通过使用 lateinit
,您负责在访问它之前初始化它第一次。
否则,如果您希望编译器保证您的安全访问,您可以像转换器默认那样使 Button
可以为 null。而不是不安全的 !!
operator但是,转换器经常使用,您应该使用 safe call operator您访问该属性的位置:
btnProceed?.setOnClickListener { ... }
如果 btnProceed
是一个非空值,这将进行常规调用,否则什么都不做。
最后一点,您可以查看 Kotlin Android Extensions ,如果它适用于您的项目,则无需为您的 View
创建属性。
关于java - 使用 Kotlin 在 Android 中的 UI 组件上声明的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47131821/
我是一名优秀的程序员,十分优秀!