android - 观察一个 MutableLiveData 列表

标签 android kotlin android-livedata android-viewmodel

我在我的应用程序中使用实时数据,并且我有一个从 ViewModel 扩展的 View 模型.

在我的 View 模型中,我有一个列表:

var songs: MutableLiveData<List<Song>> = MutableLiveData<List<Song>>()

在我的 View 模型中的一个函数中,我这样做:
 songs.value?.find { it.id == song.id }.also {

                when (song.isFavorite) {
                    true -> song.isFavorite = false
                    false -> song.isFavorite = true
                }
            }

我将在 songs 中的项目中更改 bool 值在 m fragment 中,我观察到这个列表,如下所示:
viewModel.songs.observe(this , Observer {

            Log.d(TAG , "songs changed")

        })

但此更改后歌曲不会通知。

为什么会这样?

谢谢您的回答。

最佳答案

实时数据的工作原理是,当实时数据的值发生变化时,它将被通知例如:

让你的歌曲数据类:

data class Song(name : String?)

在 View 模型中:
val songLiveData = MutableLiveData<Song?>

在您的 Activity 中:
viewModel.songLiveData.observe(this , Observer {

        Log.d(TAG , "songs changed")

    })
songLiveData.value = Song(name = "Name of Song")

这将起作用。

当您调用实时数据的 setValue 时,回调会到达观察者。
private val songsLiveData = MutableLiveData<List<Song?>>()

init {
   songsLiveData.value = ArrayList()
}

fun editSong() {
    //change all the things in you live data
    songsLiveData.value = songsLiveData.value//this will give the callback to you observer
}

关于android - 观察一个 MutableLiveData 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53790523/

相关文章:

android - Kotlin位置离我的位置很远我该如何使其更加准确

android - androidx.paging.DataSource.Factory 时 Room 无法检索数据(使用 LiveData + Kotlin 协程)

安卓动画问题

android - onclick 事件在 android 中不起作用

android - 使用 Retrofit 获取 api

android - 具有多个参数的 MediatorLiveData 或 switchMap 转换

android - 如何将 livedata 和 viewmodel 与 viewholder 作为 Lifecycle Owner 一起使用?

java - 为什么我的 "posts"在 android recyclerview 中以不同的大小加载?

android - 房间数据库全动态查询

java - 如何确保 gradle 仅在构建应用程序到 100% 后才执行主类?