19

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

autoCompleteTextView.setText(valueFromAlternativeSource);

其中valueFromAlternativeSource是有效的自动完成选项之一。问题在于调用 setText 时会出现自动完成下拉菜单。在上面的后面加上以下行不起作用:

autoCompleteTextView.dismissDropDown();  //Doesn't work.  Why?

关于为什么关闭下拉列表不起作用或我可以关闭下拉列表的其他方式的任何想法?

4

5 回答 5

16

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

ListAdapter adapter = autoCompleteTextView.getAdapter();
autoCompleteTextView.setAdapter(null);
autoCompleteTextView.setText("whatever");
autoCompleteTextView.setAdapter(adapter);
于 2013-02-27T14:31:58.240 回答
11

如果你想支持 API<17,子类 AutoCompleteTextview 和覆盖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
        }
    }
}

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

于 2014-05-09T15:22:34.533 回答
7

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

//autoCompleteTextView.dismissDropDown();
new Handler().post(new Runnable() {
    public void run() {
        autoCompleteTextView.dismissDropDown();
}});
于 2012-03-26T13:26:43.493 回答
3
autoCompleteTextView.setText(valueFromOtherMeans, filter);

     * @param filter If <code>false</code>, no filtering will be performed
     *        as a result of this call.
于 2013-03-22T12:27:10.107 回答
2

我的解决方案(但我不喜欢它,必须有更好的东西):

autoCompleteTextView.setText(valueFromAlternativeSource);
autoCompleteTextView.setDropDownHeight(0);

autoCompleteTextView.setOnKeyListener(new OnKeyListener(){

   @Override
   public boolean onKey(View v, int keyCode, KeyEvent event) {
       autoCompleteTextView.setDropDownHeight(LayoutParams.WRAP_CONTENT);
   }
}
于 2012-03-16T10:35:12.380 回答