android - Android RecyclerView MVVM 在哪里使用 notifyDataSetChanged 更新 Adapter
问题描述
我应该在哪里调用notifyDataSetChanged()
我的适配器上的任何形式?数据源是异步填充的,因为我从 Web 获取数据。
适配器属于视图。但是适配器的数据源属于视图模型。视图模型不应引用视图。
我能想到的更新适配器的唯一方法是使用广播接收器,我认为这也不是推荐的解决方案。
我的片段.kt
override fun onViewCreated(...) {
//...
recyclerView.adapter = myItemAdapter
}
我的视图模型.kt
private val _myItems = mutableListOf<Item>()
val myItems: List<Item> = _myItems
private fun someMethod() {
viewModelScope.launch {
_myItems.addAll(itemsRepository.getSomeItems())
}
}
提前致谢
编辑:
我不想将数据源封装在 a 中LiveData
并观察它的视图变化,因为数据源实际上只是初始化了一次,再也没有更新过。有没有另一种方法,还是我必须使用LiveData
?
解决方案
_myItems
由 MutableLiveData声明
val _myItems = MutableLiveData<MutableList<Item1>>()
并在片段中观察它
viewModel._myItems.observe(this, Observer { itemss ->
myItemAdapter.set(items)
myItemAdapter.notifyDataSetChanged()
}
推荐阅读
- linux - Kali Linux 中缺少左侧浮动坞站,并且 Tweak 无法正常工作
- c# - 如何使用字符串而不是int?在 C# 中
- python - 如何对经度和纬度进行分箱并绘制分箱的密度?
- java - 将子实体添加到现有的父 hibernate onetomany
- javascript - 如何在 html/css 中使内联 svg 可点击以在 javascript 中使用 onclick?
- visual-studio-code - 如何在没有 git 的情况下恢复文件的先前版本?
- java - 将压缩的 ascii 转换为 ascii 并返回
- angular - Angular 2 - __generator 未定义
- drools - 有没有办法在 drools 中调用 void 函数?
- android - 无法使用 Nearby.Messages [Android] 发布消息