Соблюдайте список MutableLiveData
Я использую Live Data в своем приложении, и у меня есть модель представления, которая простирается от 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")
})
Но песни не будут уведомлять после этого изменения.
Почему это происходит?
Спасибо за ответ.
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
}
Вы должны использовать Transformations.switchMap(boolean isFavorite, method do)
, когда isFavorite меняет значение, тогда вызов метода и наблюдатель получают новое значение