我有下面的代码从我的房间数据库的LiveData中获取信息-
private fun initAdapterData() {
adapter = FriendsListAdapter(requireContext())
binding.friendsRecyclerview.setAdapterWithItemDecoration(requireContext(), adapter)
// val testList = mutableListOf<FriendModel>()
// for (i in 0..15) {
// testList.add(FriendModel("Alon Shlider", 0))
// }
// adapter.submitList(testList)
viewmodel.getAllFriends().observe(requireActivity(), Observer { userList ->
val friendsList = mutableListOf<FriendModel>()
userList.forEach { userModel ->
friendsList.add(
FriendModel(userModel.firstName.plus(" ").plus(userModel.lastName), 0))
}
friendsList.forEach {
Log.d("friend", it.toString())
}
lifecycleScope.launch(Dispatchers.Main) {
adapter.submitList(friendsList)
}
})
}
出于某种原因,在观察者内部调用submitList不会将项添加到列表中。
我试图在观察者之前添加虚假的测试项目,它工作了,我在调用submitList方法之前记录了模型信息,它打印了有效信息。
我还试图用一个主分发器的协程来结束对submitList的调用,认为这与回调不在主线程中或类似的东西有关,但仍然没有结果。
我错过了什么?一切看起来都很好,但数据没有添加到我的RecyclerView中。
首先,您必须将适配器分配给RecyclerView,然后提交列表。
recylerView.adapter = adapter
adapter.submitList(friendsList)
当项目添加到LiveData列表时,我需要获得一个Observer事件。但据我所知,只有当我用新列表替换旧列表时,事件才会收到。例如,当我执行下一个操作时: 观察者获取事件。但当我将项目添加到值中时,观察者是沉默的。你能给我一些建议吗?
问题内容: 我正在做一个项目。它只是显示任务列表并向其中添加新任务。我有3个班级。一种用于添加,一种用于查看,一种用于保存所有信息(或者我认为)。 我的列表中已经有2个任务,它们显示正确。 问题是,当我 添加 新任务时,它不会在视图中显示。我尝试了许多可能的解决方案: 只需将项目添加到列表 创建一个新列表,其中包含旧列表中的项目并重建适配器; 使用沿着与附加()命令; 等等 这是我的代码,有点混乱
此外,为什么Viewmodel不能观察到它自己的LiveData的变化?
我有一个片段和一个相应的viewmodel类。我在Fragment方法上从DB获取包装为LiveData的联系人列表。它工作得很好,我使用PagedListAdapter显示联系人列表,如下所示: 我在我的片段中添加了一个观察者,如下所示: 有一个按钮在我的片段,它把我带到另一个屏幕,在那个屏幕上我添加更多的联系人到表。但当我从那个屏幕回到我的片段时,观察者并没有被调用。这意味着返回时不会调用方法
在livedata的observe方法中有这样一条评论 在给定所有者的生命周期内将给定的观察者添加到观察者列表中。事件在主线程上分派。如果LiveData已经有数据集,它将传递给观察者。 当我尝试向现有livedata实例添加新的观察者时,如果livedata具有数据集,则new观察者的onChanged方法调用。 有什么办法可以避免这种行为吗?我只是不想被通知新的观察员 SingleLiveEv
我有一个单独的类来处理数据提取(特别是Firebase),我通常从它返回LiveData对象并异步更新它们。现在我希望将返回的数据存储在ViewModel中,但问题是为了获得所述值,我需要观察从数据提取类返回的LiveData对象。observe方法需要一个LifecycleOwner对象作为第一个参数,但我的ViewModel中显然没有这个对象,而且我知道我不应该在ViewModel中保留对ac