AutoCompleteTextView选择项异常:选中项显示为第一项问题求助
解决AutoCompleteTextView选中项后显示第一项的问题
嘿,我碰到过这个坑!你遇到的现象是AutoCompleteTextView的默认行为搞的鬼——当你调用普通的setText()方法时,它会自动触发内部的过滤逻辑,把你设置的文本当成用户输入去匹配适配器里的列表项,刚好匹配到第一项,就自动替换成第一项显示了。
给你两种靠谱的解决办法:
方法一:使用带过滤开关的setText方法(推荐)
AutoCompleteTextView本身提供了一个重载的setText(CharSequence text, boolean filter)方法,第二个参数传false就能跳过过滤逻辑,直接设置选中的文本:
district.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { selectedDistrict = districtsNameList.get(position); Log.d("tag","============position===="+position); Log.d("tag", "22222222222222222222222222===" + selectedDistrict); // 关键:用带filter参数的setText,false表示不触发过滤 district.setText(selectedDistrict, false); // 把光标移到文本末尾,提升用户体验 district.setSelection(selectedDistrict.length()); } });
方法二:临时移除适配器再恢复
如果你的项目兼容旧版本(不过现在基本都支持上面的方法了),可以先移除适配器,设置文本后再重新绑定:
district.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { selectedDistrict = districtsNameList.get(position); Log.d("tag","============position===="+position); Log.d("tag", "22222222222222222222222222===" + selectedDistrict); // 先移除适配器,避免setText触发过滤 district.setAdapter(null); district.setText(selectedDistrict); // 重新绑定适配器,恢复自动提示功能 Utilities.setAutoCompleteTextViewAdapter(MainActivity.this, districtsNameList, district); district.setSelection(selectedDistrict.length()); } });
另外提个小细节:你代码里的Log.d("tag","============positioj===="+position)有个拼写错误,positioj改成position就更规范啦~
内容的提问来源于stack exchange,提问作者basha
相关产品推荐
相关产品推荐

