You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用启动崩溃:lateinit binding未初始化问题求助

Android应用启动崩溃:lateinit Binding未初始化问题修复

问题现象

运行应用时先出现白屏,随后弹出“App已停止”提示,Logcat核心错误信息:

kotlin.UninitializedPropertyAccessException: lateinit property binding has not been initialized

错误原因

在MainActivity的onCreate方法中,代码执行顺序错误:

  • 先调用了setContentView(binding.root),但此时binding变量尚未通过ActivityMainBinding.inflate(layoutInflater)完成初始化,直接访问未初始化的lateinit变量触发异常。
  • 提前调用findViewById(R.id.main),此时还未设置内容视图,会返回null,导致Insets监听逻辑无效。

修复方案

调整代码执行顺序,确保binding初始化后再使用,同时修正Insets监听的视图引用:

修改后的MainActivity代码

//Step 1 -> Add recyclerview to the xml
//Step 2 -> make itemView
//step 3 -> make data model
//Step 4 -> make adapter
//Step 5 -> data list
package com.example.recycleviewscroller

import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.recycleviewscroller.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    private lateinit var rvAdapter: RvAdapter
    private lateinit var dataList: ArrayList<RvModel>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        
        // 1. 先初始化Binding对象
        binding = ActivityMainBinding.inflate(layoutInflater)
        // 2. 使用Binding的根视图设置内容
        setContentView(binding.root)
        // 3. 用Binding根视图替代findViewById,设置Insets监听
        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        dataList = ArrayList<RvModel>()
        dataList.add(RvModel(R.drawable.food, "Andorus Hotel ", "Andra"))
        dataList.add(RvModel(R.drawable.food, "Andorus Hotel ", "Andra"))
        dataList.add(RvModel(R.drawable.food, "Andorus Hotel ", "Andra"))
        dataList.add(RvModel(R.drawable.food, "Andorus Hotel ", "Andra"))
        dataList.add(RvModel(R.drawable.food, "Andorus Hotel ", "Andra"))
        dataList.add(RvModel(R.drawable.food, "Andorus Hotel ", "Andra"))
        dataList.add(RvModel(R.drawable.food, "Andorus Hotel ", "Andra"))

        rvAdapter = RvAdapter(dataList, this)
        binding.rv.layoutManager = LinearLayoutManager(this)
        binding.rv.adapter = rvAdapter
    }
}

补充说明

提供的Adapter代码无问题,无需修改。

内容的提问来源于stack exchange,提问作者Shahid Faried

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:03:21