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