У меня есть фрагмент, который загружает список продуктов, затем я go к другому фрагменту, но когда я возвращаюсь, Resource.Loading
снова запускается, показывает мой индикатор выполнения
Я использую компоненты навигации и Я знаю, что должен справиться со своим состоянием, но мой вопрос заключается в следующем.
Я знаю, что liveata будет хранить мои данные, а затем при возврате к этому фрагменту он будет сразу же загружать их из самого livingata и не получать это снова, но это также показывает мой индикатор выполнения над моим списком данных, я знаю, что это потому, что мой emit(Resource.Loading())
из моей viewModel, но ...
Есть ли способ не показать этот прогресс или нет испустить это состояние загрузки, если я вернусь из другого фрагмента и воссоздаю это onActivityCreated?
код
мой фрагмент
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel.fetchProductList()
.observe(viewLifecycleOwner, Observer {
when (it) {
is Resource.Loading -> {
showProgress()
}
is Resource.Success -> {
hideProgress()
landingAdapter.itemList = it.data
if (landingAdapter.itemCount == 0) {
Toast.makeText(
requireContext(),
"No items yet",
Toast.LENGTH_SHORT
).show()
}
landingAdapter.notifyDataSetChanged()
}
is Resource.Failure -> {
hideProgress()
}
}
})
}
ViewModel
fun fetchProductList() = liveData(Dispatchers.IO) {
emit(Resource.Loading())
try{
val getProductList = repo.getProductList()
emit(getProductList)
}catch (e:Exception){
emit(Resource.Failure(e))
}
}
В этот момент я думаю, что испускание снова Resource.Loading()
при воссоздании моего фрагмента в popBackstack снова показывает мне мой progressDialog
У меня есть попытался использовать обертку Event, но она также делает то же самое
Edit
Так как я использую livedata-ktx
, я не хочу загружать свои данные в конструктор viewmodel, вместо этого я хочу обработать это только один раз в моем фрагменте
Спасибо