首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段中的Lateinit属性尚未初始化

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

Stack Overflow用户
提问于 2019-10-14 15:58:21
回答 2查看 1.5K关注 0票数 1

当变量只在onCreate中声明时,为什么我的片段没有进入onCreateView?

它只告诉我"lateinit属性beatBox尚未初始化“,但它已经初始化了!

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

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

代码语言:javascript
复制
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!)

    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-14 16:25:37

问题是。你重新声明了beatBox

代码语言:javascript
复制
private lateinit var beatBox: BeatBox

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

所以,在onCreate中去掉var关键字就行了;)

票数 3
EN

Stack Overflow用户

发布于 2019-10-14 16:28:05

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

代码语言:javascript
复制
 var beatBox = BeatBox(requireContext())  

将上述代码替换为

代码语言:javascript
复制
beatBox = BeatBox(requireContext())

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58372375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档