Итак, у меня есть приложение с SearchView
, каждый раз, когда я ищу коктейль, оно обновляет список с этим коктейлем, это работает с первым и вторым поиском, после выполнения в третий раз живые данные не испускается снова, и, следовательно, я не вижу загрузки, если новые данные поиска
View
private fun setupObservers(){
viewModel.fetchTragosList.observe(viewLifecycleOwner, Observer { result ->
when(result){
is Resource.Loading -> {
progressBar.visibility = View.VISIBLE
}
is Resource.Success -> {
progressBar.visibility = View.GONE
rv_tragos.adapter = MainAdapter(requireContext(), result.data.toMutableList(),this)
}
is Resource.Failure -> {
progressBar.visibility = View.GONE
Toast.makeText(requireContext(), "Error: ${result.exception}", Toast.LENGTH_SHORT).show()
}
}
})
}
private fun setupSearchView(){
searchView.setOnQueryTextListener(object:SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String?): Boolean {
viewModel.setTrago(query!!)
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
return false
}
})
}
ViewModel
class MainViewModel @ViewModelInject constructor (private val repo:Repo):ViewModel(){
private val tragosData = MutableLiveData<String>()
fun setTrago(tragoName:String){
tragosData.value = tragoName
}
init {
setTrago("margarita")
}
val fetchTragosList = tragosData.distinctUntilChanged().switchMap { nombreTrago ->
liveData(viewModelScope.coroutineContext + Dispatchers.IO) {
emit(Resource.Loading())
try{
emit(repo.getByName(nombreTrago))
}catch (e: Exception){
emit(Resource.Failure(e))
}
}
}
Repo
override suspend fun getTragoByName(nombreTrago: String): Resource<List<Drink>> {
return Resource.Success(webService.getTragoByName(nombreTrago).drinksList)
}
Итак, что происходит, я ищу 1 раз, и он работает, я ищу второй раз, и он работает, когда я ищу снова, он перестает излучать, и у меня нет новых данных, которые я ищу, если есть неправильное имя, которое не найдено, также ничего не возвращает при нажатии на кнопку поиска.
Почему так происходит?