Ответ
В MVVM для уведомления View о событиях из ViewModel используются LiveData или StateFlow/SharedFlow. View подписывается на изменения и реагирует на них.
LiveData пример:
// ViewModel
private val _event = MutableLiveData<Event>()
val event: LiveData<Event> = _event
fun triggerEvent() {
_event.value = Event()
}
// Activity/Fragment
viewModel.event.observe(this) { event ->
// handle event
}
StateFlow пример:
// ViewModel
private val _event = MutableSharedFlow<Event>()
val event = _event.asSharedFlow()
suspend fun triggerEvent() {
_event.emit(Event())
}
// Activity/Fragment
lifecycleScope.launch {
viewModel.event.collect { event ->
// handle event
}
}
Ключевые моменты:
- ViewModel никогда не держит ссылки на View
- View подписывается на изменения через Observer/Collect
- Для одноразовых событий можно использовать
SingleLiveEventили специальные шаблоны с SharedFlow