Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- interface SensorRepo {
- fun getSensorParamsLiveData(sensorName: String): LiveData<SensorParams>
- fun getSensorDataLiveData(sensorName: String): LiveData<List<SensorData>>
- }
- class SomeViewModel(sensorRepo: SensorRepo) : ViewModel() {
- private val sensorNameLiveData = MutableLiveData<String>()
- private val sensorParamsLiveData = Transformations.switchMap(sensorNameLiveData) {
- sensorRepo.getSensorParamsLiveData(it)
- }
- private val sensorDataLiveData = Transformations.switchMap(sensorNameLiveData) {
- sensorRepo.getSensorDataLiveData(it)
- }
- val sensorLiveData: LiveData<Sensor> = MediatorLiveData<Sensor>().apply {
- var lastSensorParams: SensorParams? = null
- var lastSensorData: List<SensorData>? = null
- fun update() {
- val sensorParams = lastSensorParams
- val sensorData = lastSensorData
- if (sensorParams == null || sensorData == null) return
- postValue(Sensor(sensorParams, sensorData))
- }
- addSource(sensorParamsLiveData) { sensorParams ->
- lastSensorParams = sensorParams
- update()
- }
- addSource(sensorDataLiveData) { sensorData ->
- lastSensorData = sensorData
- update()
- }
- }
- data class Sensor(
- val sensorParams: SensorParams,
- val sensorData: List<SensorData>
- )
- }
- class SomeFragment : Fragment() {
- lateinit var someViewModel: SomeViewModel
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- someViewModel.sensorLiveData.observe(this, Observer { (sensorParams, sensorData) ->
- // consume sensor params and sensor data
- })
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement