首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免在以编程方式设置文本时出现自动完成下拉菜单?

问如何避免在以编程方式设置文本时出现自动完成下拉菜单?
EN

Stack Overflow用户
提问于 2011-09-18 06:38:04
回答 5查看 9K关注 0票数 19

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

代码语言:javascript
复制
autoCompleteTextView.setText(valueFromAlternativeSource);

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

代码语言:javascript
复制
autoCompleteTextView.dismissDropDown();  //Doesn't work.  Why?

有没有什么想法可以解释为什么关闭dropdown不起作用,或者其他我可以关闭dropdown的方法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-05-09 23:22:35

如果您想支持API<17,可以子类化AutoCompleteTextview并重写setText(text, filter)方法

代码语言:javascript
复制
@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
        }
    }
}

然后,每当您想手动设置文本时,都可以调用setText(text, false)

票数 11
EN

Stack Overflow用户

发布于 2013-02-27 22:31:58

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

代码语言:javascript
复制
ListAdapter adapter = autoCompleteTextView.getAdapter();
autoCompleteTextView.setAdapter(null);
autoCompleteTextView.setText("whatever");
autoCompleteTextView.setAdapter(adapter);
票数 16
EN

Stack Overflow用户

发布于 2012-03-26 21:26:43

看起来这是一个消息处理顺序的问题。我的工作是这样的:

代码语言:javascript
复制
//autoCompleteTextView.dismissDropDown();
new Handler().post(new Runnable() {
    public void run() {
        autoCompleteTextView.dismissDropDown();
}});
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7458291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档