观察一个 MutableLiveData 列表
Observe a MutableLiveData list
我在我的应用程序中使用实时数据并且我有一个从 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")
})
但是修改后歌曲不会通知
为什么会这样?
谢谢您的回答。
实时数据的工作原理是,当实时数据的值发生变化时,它会收到通知,例如:
让你的歌曲数据class:
data class Song(name : String?)
在视图模型中:
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
}
我在我的应用程序中使用实时数据并且我有一个从 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")
})
但是修改后歌曲不会通知
为什么会这样?
谢谢您的回答。
实时数据的工作原理是,当实时数据的值发生变化时,它会收到通知,例如:
让你的歌曲数据class:
data class Song(name : String?)
在视图模型中:
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
}