rudolf.hladik
04/06/2018, 8:48 AMclass DefaultValueLiveData<T>(defaultValue: T) : MutableLiveData<T>() {
init {
value = defaultValue
}
}
fun <T> DefaultValueLiveData<T>.observeForever(listener: (T) -> Unit) {
this.observeForever(Observer {
it?.let {
listener(it)
}
})
}
fun <T> DefaultValueLiveData<T>.observe(owner: LifecycleOwner, listener: (T) -> Unit) {
this.observe(owner, Observer {
it?.let {
listener(it)
}
})
}
fun <T> DefaultValueLiveData<T>.value(): T {
return value!!
}
and here is implementation example:
val state = DefaultValueLiveData(State.CONTENT)
viewModel.state.observe(this) { // leads to my extension fun
binding.stateLayout.setState(it) // it is non-null
}
viewModel.state.observeForever { // leads to LiveDate fun instead of my ext fun
binding.stateLayout.setState(it) // it is nullable
}