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
liveData
LiveData containing OneTimeEvents
action
Callback invoked with unhandled event content
Type Parameters
T
The type of event data
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
liveData
MutableLiveData containing OneTimeEvents
action
Callback invoked with unhandled event content
Type Parameters
T
The type of event data