AutoCompleteTextView检测用户编辑列表中选择的条目

17

我有一个AutoCompleteTextView,用于从长列表中选择项目。用户只能选择预定的列表项,不能输入自己的内容。

我检查确保他们仅提交列表中的项目的方法是使用setOnItemClickListener触发布尔标志。问题是,在布尔标志设置为true之后,他们仍然可以编辑所选项目的文本。我需要检测到这一点并将布尔标志再次设置为false。我该怎么做?我看到了建议使用onKeyDown,但是我不知道如何实现。


请参考以下链接:https://dev59.com/U2w05IYBdhLWcg3wv0V6 - Jitheesh S Khan
3个回答

55

您可以添加文本更改监听器:

autoCompleteTextView.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {                

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});

2
你如何通过这个解决方案区分下拉选择和用户替换整个字符串? - foo
1
我是通过在适配器中搜索新字符串来实现的。然而,我的用例连接到一个API并显示搜索结果。因此,对我来说问题是,在弹出窗口中选择搜索结果后,当文本更新后,弹出窗口会再次出现而不是消失。 - Jesson Atherton
@Jesson Atherton,你是如何解决这个问题的?对我来说就像是一个无限循环。 - Jemsheer K D

2

实现一个TextWatcher,它将提供3个方法,当有人更改文本时,这些方法将不断地得到回调。 如果字符串增长,那么您的用户正在自己输入。


0

使用

AutoCompleteTextView#setOnItemSelectedListener() 

- 运行得非常好。


虽然这段代码片段可能解决了问题,但包括解释 真的有助于提高你的帖子质量。请记住,您正在回答未来读者的问题,而这些人可能不知道您代码建议的原因。 - J. Chomel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接