首页 > 解决方案 > 分配了 lateinit 属性值,但我在 Kotlin 中遇到 kotlin.UninitializedPropertyAccessException

问题描述

在为片段创建实例时,我在 Kotlin 中为 lateinit 变量赋值,然后我在片段的 oncreateview 方法中使用了该变量。它运行良好,但有时它返回 kotlin.UninitializedPropertyAccessException 并且我的应用程序已关闭。我不知道它何时发生,我检查了多个场景。但它永远不会奏效。

在这里我添加了我的代码,

private lateinit var mViewModel: SearchViewModel
companion object {
      fun getInstance(activity: Activity?): SearchFragment {
            val fragment = SearchFragment()
            fragment.mViewModel = SearchViewModel(activity)
            return fragment
      }
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.search_fragment, container, false)
        mBinding.viewModel = mViewModel
}

标签: androidkotlin

解决方案


Fragment.onCreateView由框架在它使用默认构造函数创建的实例上调用,而不是通过调用getInstance它不知道的方法来调用。

也许你应该初始化变量onAttach


推荐阅读