【问题标题】:Adapter submitList not adding new items inside LiveData observer适配器 submitList 未在 LiveData 观察者中添加新项目
【发布时间】:2020-11-11 23:26:05
【问题描述】:

我有以下代码从我的 Room DB 中获取 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 方法之前记录了模型信息并打印了有效信息。

我还尝试用 Main 调度程序的协程包装对 submitList 的调用,认为这与回调不在主线程或类似的东西中但仍然没有结果有关。

我错过了什么?一切看起来都很好,但没有将数据添加到我的 RecyclerView。

【问题讨论】:

  • 提交列表后使用adapter.notifyDataSetChanged()通知适配器。我认为它会工作
  • 不,什么也没做。所有通知函数都使用 AsyncListDiffer (ListAdapter) 是多余的,因为与仅使用 RecyclerView.Adapter 类相比,这是它的主要功能。它使用相关函数计算差异和通知。
  • 您是否将您的适配器分配给 RecyclerView,然后在提交列表之后?
  • 刚刚做到了,它奏效了。您可以发表评论,我会批准,但我想先知道为什么它需要重新分配适配器,而在其他任何地方都不需要?
  • 在 oncreate 方法中将适配器分配给 recyclerView 之后,您就可以从任何地方提交您的列表。

标签: android android-recyclerview android-listadapter


【解决方案1】:

首先,您必须将您的适配器分配给 RecyclerView,然后提交列表。

recylerView.adapter = adapter
adapter.submitList(friendsList)

【讨论】:

  • 正如我所说 - 这解决了我的问题,但我想知道为什么它需要我重新分配适配器。在其他任何地方都没有。
  • 在 oncreate 方法中将适配器分配给 recyclerView 之后,您可以从任何地方提交列表而无需再次分配。
  • 我遇到了同样的问题,我已经在 onViewCreated 中完成了 recylerView.adapter = adapter。我仍然有这个问题。你能帮忙吗
  • 您遇到的具体错误请在此处发布
猜你喜欢
  • 1970-01-01
  • 2021-06-01
  • 2018-06-05
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多