如何以编程方式设置文本时,如何避免出现自动完成下拉列表?

Chr*_*ght 18 android autocompletetextview

我的布局中有一个AutoCompleteTextView.我还有另一种方法来选择AutoCompleteTextView中存在的相同项目.选择替代方法时,我通过以下方式填充AutoCompleteTextView中的值:

autoCompleteTextView.setText(valueFromAlternativeSource);
Run Code Online (Sandbox Code Playgroud)

其中valueFromAlternativeSource一个是有效的自动完成选项.这样做的问题在于调用setText时会出现自动完成下拉列表.在上面之后放置以下行不起作用:

autoCompleteTextView.dismissDropDown();  //Doesn't work.  Why?
Run Code Online (Sandbox Code Playgroud)

关于为什么解雇下拉列表没有工作的任何想法或其他方式我可以解雇下拉列表?

小智 14

这对我来说很好,而且不太复杂:

ListAdapter adapter = autoCompleteTextView.getAdapter();
autoCompleteTextView.setAdapter(null);
autoCompleteTextView.setText("whatever");
autoCompleteTextView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)


mar*_*ant 11

如果要支持API <17,Subclass AutoCompleteTextview和override setText(text, filter)方法

@Override
public void setText(CharSequence text, boolean filter) {
    if(Build.VERSION.SDK_INT>=17) {
        super.setText(text, filter);
    }else{
        if(filter){
            setText(text);
        }else{
            ListAdapter adapter = getAdapter();
            setAdapter(null);
            setText(text);
            if(adapter instanceof ArrayAdapter)
                setAdapter((ArrayAdapter) adapter);
            else
                setAdapter((CursorAdapter) adapter);
            //if you use more types of Adapter you can list them here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后每当你想手动设置文本调用 setText(text, false)


Gen*_*ene 7

看起来它是处理消息的顺序问题.我的工作看起来像这样:

//autoCompleteTextView.dismissDropDown();
new Handler().post(new Runnable() {
    public void run() {
        autoCompleteTextView.dismissDropDown();
}});
Run Code Online (Sandbox Code Playgroud)