我正在使用Android AutoCompleteTextView
和CursorAdapter
向应用添加自动填充功能。在视图的onItemClickListener()
中(即,当用户触摸其中一个自动完成的下拉项目时),我检索文本并将其放在EditText中,以便用户可以根据需要进行修改。
但是,当我在TextView上调用setText()
时,会触发自动完成行为并再次显示下拉列表。如果用户使用键盘输入新文本,我只想显示下拉列表。有没有办法做到这一点?
答案 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);