У меня возникли проблемы с AutoCompleteTextView.
Вот моя реализация AutoCompleteTextView -
override fun setAutoCompleteAddresses() {
addressAutoCompleteTV.threshold = 0
addressAutoCompleteTV.dismissDropDown()
val textWatcher = object : AfterTextChangedWatcher() {
override fun afterTextChanged(editable: Editable?) {
addressAutoCompleteTV.dismissDropDown()
//we disable the auto completion if the any option of the auto completion was clicked so we won't trigger the auto completion again.
val query = editable.toString()
currentlySearchedAddress = query
AddressesNetworking.searchQueryAutoCompleteAddresses(authorizationToken, query, object : AddressesNetworking.OnAutoCompleteQueryFetchListener {
override fun onSuccess(models: List<SearchAddressesResponseModel>) {
if (query != currentlySearchedAddress) return
addressesModelList.clear()
models.forEach { addressesModelList.add(it) }
val addressesStringList = mutableListOf<String>()
models.forEach {
addressesStringList.add(it.address)
}
val adapter: ArrayAdapter<String> = ArrayAdapter(context!!, android.R.layout.simple_dropdown_item_1line, addressesStringList)
addressAutoCompleteTV.setAdapter(adapter)
addressAutoCompleteTV.showDropDown()
}
override fun onError(reason: String) {
Toast.makeText(context, reason, Toast.LENGTH_SHORT).show()
}
})
}
}
addressAutoCompleteTV.addTextChangedListener(textWatcher)
addressAutoCompleteTV.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
addressAutoCompleteTV.onItemSelectedListener = null
addressAutoCompleteTV.dismissDropDown()
KeyboardUtils.hideKeyboard(this@CheckoutAddressesFragment)
addressAutoCompleteTV.addTextChangedListener(textWatcher)
}
}
addressAutoCompleteTV.onItemClickListener = object : AdapterView.OnItemClickListener {
override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
addressAutoCompleteTV.dismissDropDown()
}
}
}
Как вы можете видеть, я использую AutoCompleteTextView с данными, полученными из сети, при каждом нажатии клавиши. Таким образом, в настоящее время у меня есть 2 проблемы с моей реализацией -
1) При выборе значения вызывается адаптер автоматического завершения, и снова отображается то же значение, выбранное снова - как отменить автоматическое завершение для значения выбор входов?
2) Для более гибкого пользовательского опыта я хочу оставить старые результаты без изменений, пока не получу новые и не заменю старые результаты новыми. Как я могу создать это поведение?