当前位置: 首页 > 知识库问答 >
问题:

适配器提交列表不添加新项目内LiveData观察员

欧阳飞
2023-03-14

我有下面的代码从我的房间数据库的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中。

共有1个答案

汤昊
2023-03-14

首先,您必须将适配器分配给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