Android - Filter LiveData List based on Selected Item change in ViewModel

后端 未结 1 980
面向向阳花
面向向阳花 2020-12-30 12:07

I have a AndroidViewModel for one of my fragments which contains a LiveData List, and I have another property for selected item of another LiveData List. Below is an example

相关标签:
1条回答
  • 2020-12-30 12:55

    You need to switchMap over the selectedTeam, and possibly renamed "allPlayers" because that's a lie. :P

    val selectedTeam = MutableLiveData<Team>()
    
    val allTeams: LiveData<List<Team>>
        get() = repository.getAllTeams().toLiveData()
    
    val playersOfSelectedTeam: LiveData<List<Player>>
        get() = Transformations.switchMap(selectedTeam) { team ->
             val allPlayers = repository.getAllPlayers().toLiveData()
             val players = when {
                 team == null -> allPlayers
                 else -> {
                     Transformations.switchMap(allPlayers) { playerList ->
                         val filteredPlayers = MutableLiveData<List<Player>>()
                         val filteredList = playerList.filter { player -> player.team == team }
                         filteredPlayers.value = filteredList
                         filteredPlayers
                     }
                 }
             }
             players 
        }
    

    Which I really hope it works as I wrote it here directly.

    0 讨论(0)
提交回复
热议问题