首页 > 解决方案 > 适配器 submitList 未在 LiveData 观察者中添加新项目

问题描述

我有以下代码从我的 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 中。

标签: androidandroid-recyclerviewandroid-listadapter

解决方案


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

recylerView.adapter = adapter
adapter.submitList(friendsList)

推荐阅读