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

点击SaveTask按钮后任务未在MainActivity显示且应用崩溃,是否布局管理器设置异常?

问题原因及修复方案

1. 应用崩溃原因及修复

你在MainActivity中初始化RecyclerView时,仅对自定义的layoutmanger变量赋值,并未将布局管理器设置给RecyclerView组件本身,导致RecyclerView缺少必要配置触发空指针异常崩溃。

修复代码:

修改MainActivity.kt中onCreate里的RecyclerView初始化逻辑:

todoRv.apply {
    // 直接给RecyclerView的原生layoutManager属性赋值
    layoutManager = LinearLayoutManager(this@MainActivity)
    adapter = this@MainActivity.recyclerAdapter
}

你自定义的lateinit var layoutmanger: RecyclerView.LayoutManager变量全程没有被用到,可直接删除。

2. 新增任务不显示原因及修复

你在TodoDao.kt中定义的查询逻辑为where isFinished != -1,但新增TodoModel时isFinished的默认值就是-1,导致刚插入的任务不符合查询条件,LiveData无法感知到新增数据,列表不会刷新。

修复方案二选一即可:

方案1:修改新增任务的isFinished默认值

修改TaskActivity.kt中saveTask方法里创建TodoModel的代码,给isFinished赋值为非-1的数值:

return@withContext db.todoDao().insertTask(
    TodoModel(
        taskName,
        isFinished = 0
    )
)

方案2:修改查询逻辑

修改TodoDao.kt中的查询语句,移除isFinished的限制:

@Query("Select * From TodoModel")
fun getAllTask():LiveData<List<TodoModel>>

可选优化

你当前MainActivity中LiveData的监听逻辑仅在数据非空时更新列表,若后续清空所有任务,列表不会同步更新为空,可调整为:

db.todoDao().getAllTask().observe(this, Observer {
    todoList.clear()
    it?.let { todoList.addAll(it) }
    recyclerAdapter.notifyDataSetChanged()
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:54:05