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
相关产品推荐
相关产品推荐

