#android #kotlin #android-jetpack-compose
#Android #kotlin #android-реактивный ранец-составить
Вопрос:
Кажется, что mutableStateOf — лучший выбор, чем LiveData, для работы с compose, но в методе onCreate activity я не могу наблюдать это в моем случае, есть ли обходной путь или придерживаться использования LiveData в activity?
// viewModel
var showError by mutableStateOf("")
private set
// ...
// activity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel.showError.observe(this) { // <- not work in activity
if (it != "") {
Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
viewModel.onShowError()
}
}
}
// ...
Комментарии:
1. Если
showError
он потребляется составным, тогда использованиеmutableStateOf
в порядке. Но в вашем случае, когда он используется несоставным пользовательским интерфейсом,LiveData
это хороший выбор.
Ответ №1:
Вы можете сохранить showError
как LiveData
в своей ViewModel:
val _showError = mutableLiveData("")
val showError: LiveData
get() = _showError
А затем использовать его из любого составного кода с удобным расширением observeAsState
:
val showErrorState = viewModel.showError.observeAsState()
Таким образом, в вашей деятельности вы можете использовать showError
непосредственно открытые как живые данные
Комментарии:
1. Совет: Если у вас много подобных свойств в вашей ViewModel, вы можете избежать дублирования множества полей резервного копирования и использовать удобный
liveData
конструктор сопрограмм, который позволяет предоставлять неизменяемыйliveData
объект потребителям