我正在开发的应用程序有三个类。MainActivity
(这里不重要)MyFragment
和MyClass
. 我lateinit
里面有一个 List MyFragment
- 这是lateinit
因为它会被某些方法使用。(顺便说一下,我正在使用 kotlin 合成)
class MyFragment: Fragment()
lateinit var myViewsList: List<View>
lateinit var viewA: View
lateinit var viewB: View
lateinit var viewC: View
override fun onCreateView(
//inflating the layout...
): View? {
val view = inflater.inflate(R.layout.fragment_timer, container, false)
val button: Button = view.myButton
viewA = view.myViewA
viewB = view.myViewB
viewC = view.myViewC
myViewsList =
listOf<View>(viewA,viewB,viewC)
myButton.setOnClickListener() {
MyClass().myMethod()
}
return view
}
然后MyClass
:
class MyClass() {
fun showViews {
MyFragment().myViewsList.forEach { // this line is causing the error
it.visibility = View.VISIBLE
}
}
fun myMethod() {
//do some stuff
//delay...
showViews()
}
}
但是每当showViews()
被调用时,我都会收到“lateinit property myViewsList not initialized”错误(当片段被销毁、启动或类似的东西时它不会被调用。在我的应用程序中,调用它需要大约 10 秒 -为简单起见,我只是将其放入 aOnClickListener
中——在这 10 秒内没有任何活动变化)。
我不明白为什么,因为它是在 OnCreateView中初始化myViewsList = listOf<View>(viewA,viewB,viewC)
的。任何涉及myViewsList
inside的调用MyFragment
都很好,但不是 inside MyClass
。那么,为什么会这样呢?调用或初始化它的正确方法是什么?