观察MutableLiveData列表

时间:2018-12-15 07:44:29

标签: android kotlin android-livedata android-viewmodel

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

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

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

在视图模型的函数中,我这样做:

 songs.value?.find { it.id == song.id }.also {

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

我将在songs中的项目中更改一个布尔值,在m片段中,我将观察到如下所示的列表:

viewModel.songs.observe(this , Observer {

            Log.d(TAG , "songs changed")

        })

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

为什么会这样?

谢谢您的回答。

1 个答案:

答案 0 :(得分:2)

实时数据的工作原理是,当实时数据的值发生更改时,将为您通知例如:

让您的歌曲数据类别:

data class Song(name : String?)

在ViewModel中:

val songLiveData = MutableLiveData<Song?>

在您的活动中:

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
}