【发布时间】: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