首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >观察MutableLiveData列表

观察MutableLiveData列表
EN

Stack Overflow用户
提问于 2018-12-15 15:44:29
回答 1查看 13.7K关注 0票数 6

我在我的应用程序中使用动态数据,并且我有一个从ViewModel扩展的视图模型。

在我的视图模型中,我有一个列表,它是:

代码语言:javascript
复制
var songs: MutableLiveData<List<Song>> = MutableLiveData<List<Song>>()

在我的视图模型的一个函数中,我这样做:

代码语言:javascript
复制
 songs.value?.find { it.id == song.id }.also {

                when (song.isFavorite) {
                    true -> song.isFavorite = false
                    false -> song.isFavorite = true
                }
            }

我将在songs中更改一个项目中的布尔值,在m片段中,我观察到如下列表:

代码语言:javascript
复制
viewModel.songs.observe(this , Observer {

            Log.d(TAG , "songs changed")

        })

但在此更改后,歌曲将不会通知。

这一切为什么要发生?

谢谢你的回答。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-15 16:07:05

实时数据是如何工作的,当livedata的值发生变化时,它将被通知,例如:

让你的数据类的歌曲:

代码语言:javascript
复制
data class Song(name : String?)

在ViewModel中:

代码语言:javascript
复制
val songLiveData = MutableLiveData<Song?>

在您的活动中:

代码语言:javascript
复制
viewModel.songLiveData.observe(this , Observer {

        Log.d(TAG , "songs changed")

    })
songLiveData.value = Song(name = "Name of Song")

这将会起作用。

当你调用实时数据的setValue时,回调就会到达观察者那里。

代码语言:javascript
复制
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
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53790523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档