In this example, I need to load List<Place> based on Location.
val locationLiveData: LiveData<Location> = viewModel.fetchLocation()val placesLiveData: LiveData<List<Place>> = Transformations.switchMap(locationObserver, { location -> if (location != null) { viewModel.fetchAllPlaces(location) }})placesLiveData.observeOnce(this, Observer<List<Place>> { places -> if (places != null) { // do something: load places into UI }})Assuming you want to do some processing with Location, you can observe Location as well.
val locationLiveData: LiveData<Location> = viewModel.fetchLocation()val locationObserver = Observer<Location> { location -> if (location != null) { // do something: update location to UI }}locationObserver.observe(this, locationObserver)val placesLiveData: LiveData<List<Place>> = Transformations.switchMap(locationObserver, { location -> if (location != null) { // if you don't want to observe location, you can do your location processing here as well. viewModel.fetchAllPlaces(location) }})placesLiveData.observeOnce(this, Observer<List<Place>> { places -> if (places != null) { // do something: load places into UI }})NOTE: the characteristic of attaching an observer to locationLiveData is that you can stop observing placesLiveData and still keep locationLiveData running.