Android RecyclerView MVVM 在哪里使用 notifyDataSetChanged 更新 Adapter
Posted
技术标签:
【中文标题】Android RecyclerView MVVM 在哪里使用 notifyDataSetChanged 更新 Adapter【英文标题】:Android RecyclerView MVVM where to update Adapter with notifyDataSetChanged 【发布时间】:2021-12-22 21:12:04 【问题描述】:我应该在我的适配器上调用任何形式的notifyDataSetChanged()
?数据源是异步填充的,因为我从网络上获取数据。
适配器属于视图。但是适配器的数据源属于视图模型。视图模型不应引用视图。
我能想到的唯一更新我的适配器的方法是使用广播接收器,我不认为这也是推荐的解决方案。
MyFragment.kt
override fun onViewCreated(...)
//...
recyclerView.adapter = myItemAdapter
MyViewModel.kt
private val _myItems = mutableListOf<Item>()
val myItems: List<Item> = _myItems
private fun someMethod()
viewModelScope.launch
_myItems.addAll(itemsRepository.getSomeItems())
提前致谢
编辑:
我不想将数据源封装在LiveData
中并观察视图中的变化,因为数据源实际上只是初始化了一次,再也不会更新。还有其他方法吗,还是我必须使用LiveData
?
【问题讨论】:
【参考方案1】:通过 MutableLiveData 声明 _myItems
val _myItems = MutableLiveData<MutableList<Item1>>()
并在片段中观察它
viewModel._myItems.observe(this, Observer itemss ->
myItemAdapter.set(items)
myItemAdapter.notifyDataSetChanged()
【讨论】:
好吧,我应该说我也想过这个问题。我真的不想让它成为 LiveData 并观察它,因为我觉得这会带来很多开销和混乱,因为数据源实际上只初始化了一次并且再也不会更新。 @SaPropper 如果您不使用 LiveData 或观察,则不需要 MVVM 我将它用于变化的数据(不止一次)......但我想你是对的:观察者是唯一的方法以上是关于Android RecyclerView MVVM 在哪里使用 notifyDataSetChanged 更新 Adapter的主要内容,如果未能解决你的问题,请参考以下文章
Android RecyclerView MVVM 在哪里使用 notifyDataSetChanged 更新 Adapter
Android入门第64天-MVVM下瀑布流界面的完美实现-使用RecyclerView
recyclerView.addOnScrollListener - “使用 MVVM 改造分页”正在加载相同的响应/列表