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

Kotlin Fragment中lateinit属性groupList未初始化问题求助

解决ExpandableListView适配器lateinit未初始化错误

问题核心是你在使用groupList和childList这两个lateinit变量创建适配器时,它们还没有被赋值。lateinit修饰的变量必须在首次使用前完成初始化,否则就会抛出lateinit property has not been initialized错误。

修复步骤:

  • 先初始化集合数据,再创建适配器:在调用ListViewAdapter构造函数之前,必须给groupList和childList赋值具体的集合数据。
  • 适配Fragment生命周期:如果数据需要异步加载(比如网络请求、数据库查询),建议在onViewCreated中处理,或者通过观察数据变化来触发适配器初始化。

修改后的示例代码:

class MyClass: Fragment() {

    private lateinit var listAdapter: YearListViewAdapter
    private lateinit var groupList: List<String>
    private lateinit var childList: HashMap<String, List<String>>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // 1. 先初始化分组和子项数据
        initData()
        
        // 2. 再创建适配器并设置
        listAdapter = YearListViewAdapter(this, groupList, childList)
        yearGoalList.setAdapter(listAdapter)
    }

    // 初始化模拟数据,实际项目中替换为真实数据源
    private fun initData() {
        groupList = listOf("2023", "2024", "2025")
        
        childList = hashMapOf(
            "2023" to listOf("Q1目标", "Q2目标"),
            "2024" to listOf("Q1目标", "Q2目标", "Q3目标"),
            "2025" to listOf("年度总目标")
        )
    }
}

额外注意事项:

  • 如果你的数据是异步加载的,不要在onCreate中直接初始化适配器,应该在数据加载完成的回调里(比如网络请求成功后)给groupList和childList赋值,再创建适配器或者调用notifyDataSetChanged()更新数据。
  • 避免拼写错误:你的代码里出现了yearListAdapter和ListAdapter两个不同的变量名,要确保变量名一致(示例中统一为listAdapter)。

内容的提问来源于stack exchange,提问作者J. Weidenhagen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:41:29