【发布时间】:2020-02-05 18:27:38
【问题描述】:
我正在尝试通过在用户长按时调用方法从房间数据库中删除笔记 注意,我在 RView 适配器上设置了 onLongClickListener:
viewHolder.itemView.setOnCLickListener{
NotesFragment().deleteSingleNote(notesID)
}
在 NotesFragment 上,方法如下:
fun deleteSingleNote(notesID: Long) {
notesFragmentViewModel.deleteSingleNoteFromDB(notesID)
}
在 ViewModel 上,该方法通过协程删除注释。
应用长点击崩溃,说lateinit notesFragmentViewModel没有初始化,指向onLongCLickListener这一行,还有我上面粘贴的NotesFragment那一行。
问题是,笔记是通过一个包含所有笔记的 NotesFragmentViewModel LiveData 变量填充到屏幕上的,所以当我长按该项目时,ViewModel 已经非常初始化了。
我尝试在适配器上初始化 ViewModel,但出现了一个与 ViewModel 相关的异常,该异常不允许在片段/活动以外的其他对象上实例化。
这是我在 SOverflow 上的第一篇文章,如果我做错了什么请告诉我
【问题讨论】:
-
lateinit property viewModel not initialized这意味着您的 viewModel 没有被初始化,永远不会被分配一个值,基本上是一个不应该为 null 的东西上的 null,看看你在哪里为 viewModel 分配了一个值,你会有你的答案 -
是的,我知道,我不知道为什么它说它没有初始化,因为我长时间点击的项目是使用来自同一个 ViewModel 的变量填充的
标签: android kotlin android-recyclerview viewmodel