SearchView не успевает прочесть текст при быстром удалении

На данный момент я делаю приложение с поиском, в котором присутствует история поиска, а также предложения для поиска.

Проблема в том, что когда я полностью стираю текст из SearchView, он должен отобразить историю поиска, казалось бы все нормально, пока я не начну стирать текст зажимая кнопку стереть на клавиатуре. В этом случае мне показывается предложения поиска по самой первой букве, хотя searchVeiw пустой, видео с тем как это работает сейчас: `private fun submitSearch() = with(binding) {

    searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(query: String): Boolean {
            viewModel.insertSearchHistory(HistoryItems(query.trim(), true))
            open(query)
            return true
        }

        override fun onQueryTextChange(query: String): Boolean {
            if (query.trim().isNotEmpty()) {
                getSearchByQuery(query)
            } else {
                viewModel.getAllSearchHistory()
            }
            return true
        }
    })
}

private fun getSearchByQuery(query: String) {
    val searchQuery = query.trim()

    viewModel.getHistorySearchByQuery(searchQuery)
}

override fun setupObserves() {
    viewModel.searchHistoryState.observe(viewLifecycleOwner, {
        when (it) {
            is UIState.Error -> {
                Log.e("onepiece", it.error)
            }
            is UIState.Loading -> {
                Log.e("naruto", "loading")
            }
            is UIState.Success -> {
                adapter.submitList(it.data)
                Log.d("loving", it.data.toString())
            }
        }
    })
}`

getSearchByQuery это метод, который делает запрос на предложения поиска после каждого изменения текста, а getAllSearchHistory - это метод который стягивает все данные из Room.

Вот код во ViewModel:

               @HiltViewModel
class SearchViewModel @Inject constructor(
private val getAllHistory: GetAllHistoryUseCase,
private val getSearchByQuery: GetSearchByQueryUseCase,
private val insertHistory: InsertHistoryUseCase,
private val deleteHistory: DeleteHistoryUseCase,
private val suggestions: GetSuggestionUseCase
) : BaseViewModel() {

private val _searchHistoryState = MutableLiveData<UIState<List<HistoryItems>>>()
val searchHistoryState: LiveData<UIState<List<HistoryItems>>> = _searchHistoryState

init {
    getAllSearchHistory()
}

fun getAllSearchHistory() {
    subscribeTo(_searchHistoryState) {
        getAllHistory().flowOn(Dispatchers.Main)
    }
}

fun getHistorySearchByQuery(query: String) {
    subscribeTo(_searchHistoryState) {
        getSearchByQuery(query)
        suggestions(query)
    }
}

fun insertSearchHistory(history: HistoryItems) = viewModelScope.launch {
    insertHistory(history)
}

fun deleteSearchHistory(history: HistoryItems) = viewModelScope.launch {
    deleteHistory(history)
}

}

Все эти мотоды работают с Flow также и методы Room.


Ответы (0 шт):