这是一个简单的问题。在Java中,您可以创建String变量或几个变量,而无需添加任何值。在Activity中调用onCreate()之前,将在类的开头使用它。我已经在Kotlin中使用了lateinit
属性来实现这一点,但是现在我在更改RecyclerView的可见性方面遇到了问题。它将引发异常"lateinit property recyclerView has not been initialized"
。
有什么方法可以知道属性是否已初始化?在Fragment的父活动开始时调用此方法(隐藏recyclerView并显示ProgressBar,直到数据绑定到recyclerView为止。)
答案 0 :(得分:1)
在Java中,您可以创建String变量或几个变量,而无需向其添加任何值
实际上,在这种情况下,它被隐式声明为null
。 Kotlin不这样做,因为它具有可空性机制。您必须明确声明一个可为null的变量以允许为null:
var str: String // does not work
var str: String? // does not work
var str: String? = null // works
另请参阅this answer。
您的另一种选择确实是将其标记为lateinit
:
lateinit var str: String // works
如果需要检查使用前是否已初始化,请使用
if (::str.isInitialized)
但是实际上,您应该避免使用此检查,只是在使用前确保已将其初始化。
答案 1 :(得分:0)
如果您需要在Kotlin中获取UI元素,则无需再使用findViewById创建变量并将其初始化(尽管可以)。使用kotlin视图绑定,效果很好。
https://kotlinlang.org/docs/tutorials/android-plugin.html#view-binding