![](/img/trans.png)
[英]How to disable AutoCompleteTextView's drop-down from showing up?
[英]Disable Android AutoCompleteTextView after user selects item from drop down
我正在使用Android的AutoCompleteTextView
和CursorAdapter
向应用添加自动完成功能。 在视图的onItemClickListener()
(即,当用户触摸其中一个自动完成的下拉项目时),我检索文本并将其放在EditText中,以便用户可以根据需要进行修改。
但是,当我在TextView上调用setText()
时,会触发自动完成行为并再次显示下拉列表。 如果用户使用键盘输入新文本,我只想显示下拉列表。 有没有办法做到这一点?
您可以使用AutoCompleteTextView对象的dismissDropDown()
方法。 看一下文档 。
如果您希望消除AutoCompleteTextView的下拉列表,则应使用其post(Runnable r)方法。 这个对我有用 :)
这是一个例子:
mAutoCompleteTextView.post(new Runnable() {
public void run() {
mAutoCompleteTextView.dismissDropDown();
}
}
经过几个小时的黑客攻击后回答我自己的问题:事实证明你应该实现自己的OnItemClickListener
,而是依靠现有的点击监听器来填充TextView。 我最初实现了onItemClickListener,因为它使用Cursor.toString()的结果来填充文本视图。 要更改输出String,您应该在CursorAdapter中实现convertToString(Cursor)
。 返回的CharSequence将填充在文本视图中。
执行此操作还会阻止下拉列表再次显示(因为setText()会触发完成行为,但默认的onItemClickListener不会)。
当我们点击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) {
}
});
不同的方法。 我同意dismissDropDown()
有效但在我的情况下,它没有按预期工作。 所以,我用过:
autoCompleteTextView.setDropDownHeight(0);
如果你想再次显示下拉列表,你可以使用
autoCompleteTextView.setDropDownHeight(intValue);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.