LiveData не выдает новые значения после двух поисков - PullRequest
1 голос
/ 06 августа 2020

Итак, у меня есть приложение с 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 раз, и он работает, я ищу второй раз, и он работает, когда я ищу снова, он перестает излучать, и у меня нет новых данных, которые я ищу, если есть неправильное имя, которое не найдено, также ничего не возвращает при нажатии на кнопку поиска.

Почему так происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...