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)
}
}
}

Usage for Snackbar Messages

observeEvent(viewModel.snackbarMessage) { message ->
Snackbar.make(binding.root, message, Snackbar.LENGTH_SHORT).show()
}

ViewModel Side

class MyViewModel : ViewModel() {
private val _navigationEvent = MutableLiveData<OneTimeEvent<String>>()
val navigationEvent: LiveData<OneTimeEvent<String>> = _navigationEvent

fun navigateToDetails() {
_navigationEvent.value = OneTimeEvent("details_screen")
}
}

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

See also