代码之家  ›  专栏  ›  技术社区  ›  Ehsan

观察可变LiveData列表

  •  0
  • Ehsan  · 技术社区  · 7 年前

    我在应用程序中使用实时数据,我有一个从 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 回复  |  直到 7 年前
        1
  •  10
  •   niketshah09    7 年前

    实时数据的工作原理是,当实时数据的值发生变化时,它将收到通知,例如:

    让您的歌曲数据类:

    data class Song(name : String?)
    

    val songLiveData = MutableLiveData<Song?>
    

    在您的活动中:

    viewModel.songLiveData.observe(this , Observer {
    
            Log.d(TAG , "songs changed")
    
        })
    songLiveData.value = Song(name = "Name of Song")
    

    这会奏效的。

    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
    }
    
    推荐文章