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.