observeEvent
inline fun <T> LifecycleOwner.observeEvent(liveData: LiveData<OneTimeEvent<T>>, crossinline action: (T) -> Unit)
Observes a LiveData containing OneTimeEvents and consumes unhandled events.
This extension is specifically designed for OneTimeEvent wrapped in LiveData, ensuring events are only consumed once even if the Activity/Fragment is recreated. Perfect for navigation events, snackbar messages, and other one-time actions.
Usage for Navigation Events
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
observeEvent(viewModel.navigationEvent) { destination ->
findNavController().navigate(destination)
}
}
}Content copied to clipboard
Usage for Snackbar Messages
observeEvent(viewModel.snackbarMessage) { message ->
Snackbar.make(binding.root, message, Snackbar.LENGTH_SHORT).show()
}Content copied to clipboard
ViewModel Side
class MyViewModel : ViewModel() {
private val _navigationEvent = MutableLiveData<OneTimeEvent<String>>()
val navigationEvent: LiveData<OneTimeEvent<String>> = _navigationEvent
fun navigateToDetails() {
_navigationEvent.value = OneTimeEvent("details_screen")
}
}Content copied to clipboard
Parameters
T
The type of event data
liveData
LiveData containing OneTimeEvents
action
Callback invoked with unhandled event content
See also
inline fun <T> LifecycleOwner.observeEvent(liveData: MutableLiveData<OneTimeEvent<T>>, crossinline action: (T) -> Unit)
Observes a MutableLiveData containing OneTimeEvents and consumes unhandled events.
This is an overload of observeEvent for MutableLiveData. Functionally identical to the LiveData variant but accepts MutableLiveData directly.
Parameters
T
The type of event data
liveData
MutableLiveData containing OneTimeEvents
action
Callback invoked with unhandled event content