Android - 在调用setText后AutoCompleteTextView不显示

9
我遇到了一个关于AutoCompleteTextView的奇怪问题。
我有一个AutoCompleteTextView,当在其中输入时,它会显示城市建议列表。城市列表是通过JSON从远程服务器检索的。当我使用软键盘或软键盘上的Mic按钮时,建议功能正常工作,AutoCompleteTextView会显示建议的城市。
但是,当我尝试使用myAutoCompleteTextView.setText("Chi")设置文本时,自动完成不会显示... 我还尝试过myAutoCompleteTextView.append("Chi"),但仍然没有成功。
适配器已经存在,只是建议不显示。
有什么提示吗?
谢谢。

你尝试过什么了吗? - Amy
你的AutoCompleteTextView没有使用适配器吗?请展示一些代码。 - barq
4个回答

11

是的,你说得对,在AutocompleteTextview中使用setText("");方法会出现bug,无法显示默认建议。

不过你可以通过添加以下几行代码来实现这一点。

autoText.postDelayed(new Runnable() {
            @Override
            public void run() {
                autoText.showDropDown();
            }
        },500);
        autoText.setText("chi");
        autoText.setSelection(autoText.getText().length());

11

由于过滤,无需任何额外的代码来管理它,我发现这非常简单且有效。

Google开发者参考链接

autoText.setText("Default Value here",false)
autoText.setSelection(autoText.text.count()) // kotlin
根据文档,您可以传递第二个参数进行过滤。布尔值:如果为false,则不会执行任何过滤。

实际上我已经这样做了,但是当设置默认值时,它只显示该项,而不显示其余项。当setText()函数的第二个参数设置为false时,应该显示列表中的所有项目,但事实并非如此。 - Kavin Raju S
1
这个选项对我非常有效,因为我也遇到了同样的问题。谢谢! - Janou

2
Biraj Zalavadia的回答是正确的,但你必须在Runnable中写入“settext”。像这样:
 mACTextViewEmail.postDelayed(new Runnable() {
            @Override
            public void run() {
                mACTextViewEmail.showDropDown();    
                mACTextViewEmail.setText("My text is here");
                mACTextViewEmail.setSelection(mACTextViewEmail.getText().length());
            }
        },500);

0

我搜索了一下,发现了这个解决方案,它非常有效 看看这个问题

fun AutoCompleteTextView.showDropdown(adapter: ArrayAdapter<String>?) {
  if(!TextUtils.isEmpty(this.text.toString())){
      adapter?.filter?.filter(null)
  }
}

在 Kotlin 语言中,您可以使用这个扩展函数。

fun 是从哪里来的? - BootCamp
你是什么意思? - mmdreza baqalpour

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