我在我的应用程序中使用动态数据,并且我有一个从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")
})但在此更改后,歌曲将不会通知。
这一切为什么要发生?
谢谢你的回答。
发布于 2018-12-15 16:07:05
实时数据是如何工作的,当livedata的值发生变化时,它将被通知,例如:
让你的数据类的歌曲:
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
}https://stackoverflow.com/questions/53790523
复制相似问题