繁体   English   中英

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

[英]Disable Android AutoCompleteTextView after user selects item from drop down

我正在使用Android的AutoCompleteTextViewCursorAdapter向应用添加自动完成功能。 在视图的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM