Junior — Middle
How can data be transferred between ViewModel and Fragment using Flow?
sobes.tech AI
Answer from AI
To pass data between ViewModel and Fragment using Flow, you can use StateFlow or SharedFlow in ViewModel and subscribe to them in the fragment.
Example using StateFlow:
// In ViewModel
class MyViewModel : ViewModel() {
private val _state = MutableStateFlow("Initial data")
val state: StateFlow<String> = _state
fun updateData(newData: String) {
_state.value = newData
}
}
// In Fragment
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
lifecycleScope.launchWhenStarted {
viewModel.state.collect { data ->
// Update UI
textView.text = data
}
}
}
}
Thus, the ViewModel updates data in MutableStateFlow, and the Fragment subscribes to changes via collect, ensuring reactive data transfer.