我有一个 ViewModel,我在其中接收数据。此外,在该片段中,我从 ViewModel 接收数据,并根据状态执行各种操作(显示数据或显示错误消息)。问题:如何在成功情况下访问片段中的数据,以及在失败时显示错误文本?
抱歉,如果问题表述不当,我只是在学习。
在 ViewModel 中加载函数
fun loadData() {
viewModelScope.launch(Dispatchers.IO) {
try {
supervisorScope {
val authorListLoad = async {
getDataUseCase.getAuthors()
}
val bookListLoad = async {
getDataUseCase.getBooks()
}
val availabilityListLoad = async {
getDataUseCase.getAvailability()
}
val authorsList = authorListLoad.await().sortedBy { it.name }
val booksList = bookListLoad.await().sortedBy { it.title }
val availabilityList = availabilityListLoad.await()
_uiState.update {
BookListUiState.Success(createAuthorModel(authorsList,booksList,availabilityList))
}
Log.d("DataLoading", "Data successfully loaded")
}
}
catch (e : Exception) {
_uiState.update {
BookListUiState.Error("Ошибка")
}
Log.d("DataLoading", "Data loading error")
}
Fragment 中的 onViewCreated 函数
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
adapter = AuthorAdapter()
binding.recyclerViewAuthor.adapter = adapter
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.uiState.collect { uiState ->
when (uiState) {
is BookListUiState.Loading ->{
binding.textViewInfo.text = getString(R.string.text_view_info_message_loading)
binding.textViewInfo.visibility = View.VISIBLE
}
is BookListUiState.Success -> {
**How can i get data?**
binding.textViewInfo.visibility = View.GONE
binding.recyclerViewAuthor.visibility = View.VISIBLE
}
is BookListUiState.Error->{
**How Can i get error message?**
binding.textViewInfo.text = getString(R.string.text_view_info_message_data_loading_error)
binding.textViewInfo.visibility = View.VISIBLE
}
else -> {
binding.textViewInfo.text = getString(R.string.text_view_info_message_unknown_error)
binding.textViewInfo.visibility = view.visibility
}
}
}
}
}
}
}