带有 Textwatcher 的 AutoCompleteTextview android

AutoCompleteTextview with Textwatcher android

我有一个关于 AutoCompleteTextview 的小问题 textwatcher.

我有 AutoCompleteTextview 用于 Suggestion.The 数据来自 API 端。我输入的每个新词都会调用 API,它会从 ApI 端获得响应,然后,建议的显示下拉菜单是 shown.So,基本上代码在 AddTextWatcher 侦听器。

但是当我点击特定建议时,正在调用 AddTextwatcher,它会调用 ApI 并再次显示建议!所以它就像

-在 AutoCompleteTextview 中写入 >> Api 正在被调用 >> 填写数据 >> 显示建议 >> 然后再次单击建议 >> 显示建议。

帮我解决这个问题。 提前致谢。

基本不难

这个 Post 为这个 Post 保存我的 day.Thanks。

http://blog.hackerkernel.com/2015/12/30/autocompleteedittext-with-dynamic-data-from-json/

  1. 声明变量:

     private var textWatcher : TextWatcher? = null
     private var selectedItemId: String? = null
    
  2. 初始化声明的变量并将文本观察器应用为:

    textWatcher = 对象:TextWatcher { override fun afterTextChanged(char: Editable?) { }

         override fun beforeTextChanged(char: CharSequence?, p1: Int, p2: Int, p3: Int) {}
    
         override fun onTextChanged(char: CharSequence?, p1: Int, p2: Int, p3: Int) {
             if(selectedItemId!=null){
                 return
             }
             callApi()
         }
     }
    
  3. 收到来自API的响应时:

    val adapter = ArrayAdapter(requireActivity(), R.layout.custom_spinner_item, R.id.item_text_view, itemList!!) mBinding.AutoCompleteTextview.setAdapter(适配器)

         mBinding.AutoCompleteTextview.error = null
         mBinding.AutoCompleteTextview.removeTextChangedListener(textWatcher)
         mBinding.AutoCompleteTextview.showDropDown()
    
    
     mBinding.AutoCompleteTextview.setOnItemClickListener { adapterView, view, position, l ->
    
         selectedItemId = adapter.getItem(position)!!.id!!.toString()
         mBinding.AutoCompleteTextview.clearFocus()
    
     }
    
  4. 最后一步:

    mBinding.AutoCompleteTextview.setOnFocusChangeListener { 视图,b -> 如果(二){ mBinding.AutoCompleteTextview.addTextChangedListener(textWatcher) } }