Соблюдайте список MutableLiveData - PullRequest
0 голосов
/ 15 декабря 2018

Я использую 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")

        })

Но песни не будут уведомлять после этого изменения.

Почему это происходит?

Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 15 декабря 2018

Как работают живые данные, когда значение живых данных изменяется, тогда они будут уведомлены, например:

Позвольте вашему классу данных песни:

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
}
...