Android中使用Textwatcher实现AutoCompleteTextview

4

我在使用AutoCompleteTextViewTextWatcher时遇到了一些小问题。

我使用AutoCompleteTextView来进行建议。数据来自API。每当我输入一个新单词时,都会调用API并从API端获取响应,然后显示建议下拉菜单。因此,该代码实际上位于AddTextWatcher监听器中。

但是,当我点击特定的建议时,AddTextwatcher被调用并重新调用API,然后再次显示建议!所以它就像:

- 在AutoCompleteTextview中输入内容>>调用API>>填充数据>>显示建议>>点击建议>>再次显示建议。

请帮我解决这个问题。

提前感谢您的帮助。


这不是一个好的解决方案 @pskink - RushDroid
有没有一种方法可以捕捉点击事件?子类化AutoCompleteTextView,重写事件,在用户点击时不调用TextWatcher?一旦您知道用户已经点击,您可以假设他选择了一个建议并且不想再得到另一个建议,对吗? - tritop
2个回答

1
  1. 声明变量:

     private var textWatcher : TextWatcher? = null
     private var selectedItemId: String? = null
    
  2. 初始化已声明的变量并应用文本监视器:

    textWatcher = object : 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(adapter )

         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 { view, b -> if (b){ mBinding.AutoCompleteTextview.addTextChangedListener(textWatcher) } }


0

4
这个答案无法被看到。你能否在这里解释一下? - Divya
1
朋友,上面的链接坏掉了。 - erik.aortiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接