簡體   English   中英

觀察MutableLiveData列表

[英]Observe a MutableLiveData list

我在應用程序中使用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")

        })

但是更改后,歌曲不會通知。

為什么會這樣?

謝謝您的回答。

實時數據的工作原理是,當實時數據的值更改時,將通知它,例如:

讓您的歌曲數據類別:

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM