首页 > 解决方案 > 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

标签: androidmvvmandroid-recyclerviewandroid-adapternotifydatasetchanged

解决方案


_myItems由 MutableLiveData声明

val _myItems = MutableLiveData<MutableList<Item1>>()

并在片段中观察它

viewModel._myItems.observe(this, Observer { itemss ->
    myItemAdapter.set(items)
    myItemAdapter.notifyDataSetChanged()
}

推荐阅读