片段中的Lateinit属性尚未初始化

时间:2019-10-14 07:58:20

标签: android android-fragments kotlin

为什么仅在onCreate中声明变量时我的片段不进入onCreateView?

它只告诉我“ lateinit属性beatBox尚未初始化”,但确实如此!

beatBox在类级别被定义为lateinit,并在onCreate中定义,但程序不会输入onCreateView方法。我可以在其中放入一个Log.d并检查创建的对象类型!除非我重新定义var beatBox,以引用新对象,否则它会崩溃。

为什么我的片段不会进入onCreateView?

class BeatBoxFragment : Fragment() {

    private lateinit var beatBox: BeatBox

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        var beatBox = BeatBox(requireContext())
        Log.d("Crashing", beatBox.toString() + " has been created, yer program does not go into onCreateView")
    }
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
    //var beatBox = BeatBox(requireContext())
    Log.d("Crashing", "The program does not enter onCreateView unless I uncomment the beatBox definition!)

    }

}

2 个答案:

答案 0 :(得分:3)

问题是...您重新声明了beatBox

private lateinit var beatBox: BeatBox

fun test() {
    var beatBox = BeatBox() // Create new beatbox for `test() scope`.
                            // beatBox for class scope is still uninitialized.
}

因此,只需删除var中的onCreate关键字;)

答案 1 :(得分:0)

您正在尝试使用twise声明beatbox对象。因此,请删除您在oncreate方法中声明的var。

 var beatBox = BeatBox(requireContext())  

替换上面的代码
beatBox = BeatBox(requireContext())

See your Mistake which i highlight so remove var from oncreate method