20

我正在使用AutoCompleteTextView带有 a 的AndroidCursorAdapter向应用程序添加自动完成功能。在视图中onItemClickListener()(即当用户触摸自动完成的下拉项目之一时),我检索文本并将其放在 EditText 中,以便用户可以在需要时对其进行修改。

但是,当我调用setText()TextView 时,会触发自动完成行为并再次显示下拉菜单。如果用户使用键盘输入新文本,我只想显示下拉列表。有没有办法做到这一点?

4

5 回答 5

21

您可以使用dismissDropDown()AutoCompleteTextView 对象的方法。看看文档

于 2011-11-08T15:08:01.140 回答
8

当我们单击在AutoCompleteTextView.onTextChanged()执行之前建议的项目时onItemClick ,为了避免这种情况,请尝试以下代码..

autocompletetextview.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        if (autocompletetextview.isPerformingCompletion()) {
            // An item has been selected from the list. Ignore.
        } else {
            // Perform your task here... Like calling web service, Reading data from SQLite database, etc...
        }
    }

    @Override
    public void afterTextChanged(final Editable editable) {

    }
});
于 2018-08-17T05:55:49.767 回答
6

如果你想关闭 AutoCompleteTextView 的下拉菜单,你应该使用它的 post(Runnable r) 方法。这个对我有用 :)

这是一个例子:

mAutoCompleteTextView.post(new Runnable() {
    public void run() {
        mAutoCompleteTextView.dismissDropDown();
    }
}
于 2012-10-15T07:49:58.277 回答
4

经过几个小时的黑客攻击后回答我自己的问题:事实证明,您应该实现自己的OnItemClickListener,而不是依靠现有的点击侦听器来填充 TextView。我最初实现了 onItemClickListener,因为它使用 Cursor.toString() 的结果来填充文本视图。要更改输出字符串,您应该convertToString(Cursor)在 CursorAdapter 中实现。返回的 CharSequence 将填充到文本视图中。

这样做还可以防止下拉菜单再次出现(因为 setText() 会触发完成行为,但默认的 onItemClickListener 不会)。

于 2011-11-08T15:37:46.537 回答
0

不同的做法。我同意dismissDropDown()工作,但就我而言,它没有按预期工作。所以,我用:

autoCompleteTextView.setDropDownHeight(0);

如果你想再次显示下拉列表,你可以使用

autoCompleteTextView.setDropDownHeight(intValue);
于 2018-07-03T09:59:19.947 回答