AutoCompleteTextView调用setText()后setAdapter()异常,下拉菜单仅显示已存值
解决AutoCompleteTextView设置文本后下拉仅显示已保存项的问题
嘿,我明白你遇到的这个困惑了——其实**setText()和setAdapter()完全可以同时使用**,问题出在setText()的默认行为上,不是两者冲突哦!
问题原因
AutoCompleteTextView默认会在你设置文本时,自动触发过滤逻辑:它会把适配器里的选项和你设置的文本做匹配,只显示符合条件的选项。所以当你用setText()设置了数据库里的已保存电话类型后,下拉菜单就只会显示和这个文本完全匹配的那一项,看起来就像其他选项消失了。而你单独用setAdapter()时,因为没有设置初始文本,过滤逻辑没触发,所以下拉能显示所有选项。
解决方法
你只需要使用setText()的重载方法,第二个参数传入false,就可以关闭设置文本时的自动过滤:
// 1. 先给AutoCompleteTextView设置适配器(比如你的电话类型列表:工作、家庭、其他) ArrayAdapter<String> phoneTypeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, Arrays.asList("工作", "家庭", "其他")); yourAutoCompleteTextView.setAdapter(phoneTypeAdapter); // 2. 从数据库获取已保存的电话类型 String savedPhoneType = getSavedPhoneTypeFromDatabase(); // 3. 使用带过滤参数的setText方法,false表示不触发过滤 yourAutoCompleteTextView.setText(savedPhoneType, false);
这样设置后,AutoCompleteTextView会显示已保存的电话类型,同时点击时下拉菜单会展示所有的电话类型选项,不会被过滤掉。
额外提示
如果你希望用户手动输入文本时依然能触发过滤(比如输入“工”就能筛选出“工作”),这个设置也不会影响——它只是关闭了初始化设置文本时的过滤,用户后续输入的过滤逻辑还是正常工作的。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

