AutoCompleteTextView - невозможно отменить автозаполнение после выбора значения - PullRequest
0 голосов
/ 05 марта 2020

У меня возникли проблемы с 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) Для более гибкого пользовательского опыта я хочу оставить старые результаты без изменений, пока не получу новые и не заменю старые результаты новыми. Как я могу создать это поведение?

...