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

时间:2011-11-08 15:03:19

标签: android user-interface autocomplete

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

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

5 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:6)

如果您希望关闭AutoCompleteTextView下拉列表,则应使用其post(Runnable r)方法。它对我有用:)

以下是一个例子:

mAutoCompleteTextView.post(new Runnable() {
    public void run() {
        mAutoCompleteTextView.dismissDropDown();
    }
}

答案 2 :(得分:2)

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

执行此操作还会阻止下拉列表再次显示(因为setText()会触发完成行为,但默认的onItemClickListener不会)。

答案 3 :(得分:1)

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

    }
});

答案 4 :(得分:0)

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

autoCompleteTextView.setDropDownHeight(0);

如果您想再次显示下拉列表,则表示您有用

autoCompleteTextView.setDropDownHeight(intValue);