用户从下拉列表中选择项目后禁用Android AutoCompleteTextView

mag*_*ter 17 user-interface android autocomplete autocompletetextview

我正在使用Android的AutoCompleteTextViewa CursorAdapter来为应用添加自动填充功能.在视图中onItemClickListener()(即当用户触摸其中一个自动完成的下拉项目时),我检索文本并将其放在EditText中,以便用户可以根据需要进行修改.

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

Fra*_*nke 18

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


Ket*_*ani 7

当我们点击在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) {

    }
});
Run Code Online (Sandbox Code Playgroud)

  • 是的!这正是我所需要的。你是对的,我的应用程序在用户选择列表中的一个项目后进行了 API 调用,然后重新填充列表并显示它!现在已经解决了,谢谢! (2认同)
  • 谢谢,`autocompletetextview.isPerformingCompletion()` 救了我。 (2认同)

Too*_*hka 6

如果您希望消除AutoCompleteTextView的下拉列表,则应使用其post(Runnable r)方法.这个对我有用 :)

这是一个例子:

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


mag*_*ter 4

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

这样做还将防止下拉列表再次显示(因为 setText() 会触发完成行为,但默认的 onItemClickListener 不会)。