Ответ
Во ViewModel данные хранятся в LiveData или StateFlow. View (Activity/Fragment) подписывается через observer:
// ViewModel
val userData = MutableLiveData<String>()
// Activity
viewModel.userData.observe(this) { data ->
textView.text = data
}
Для StateFlow:
// ViewModel
val uiState = MutableStateFlow("")
// Fragment
lifecycleScope.launchWhenStarted {
viewModel.uiState.collect { data ->
textView.text = data
}
}
Ключевые моменты:
- View не изменяет данные напрямую
- Подписка привязывается к lifecycle (автоматически отписывается)
- Для Compose используйте collectAsState()
- Избегайте утечек памяти через viewLifecycleOwner в Fragment