Как наблюдать изменяемый статус в activity onCreate

#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 объект потребителям