Android:点击AutoCompleteTextView下拉项时不填充内容的实现方法
解决AutoCompleteTextView点击选项不填充输入框的问题
刚好之前碰到过类似的需求,其实很简单,咱们只需要给AutoCompleteTextView加个自定义的点击监听,把它默认的填充逻辑覆盖掉就行。
你现在的情况是下拉列表能正常显示,就是点击选项会自动填到输入框里,对吧?那直接看代码怎么改:
首先,在你的onCreate方法里,初始化完AutoCompleteTextView和适配器之后,添加这个OnItemClickListener:
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 先拿到选中的选项,你可以把它存起来做后续逻辑 String selectedOption = language[position]; // 核心操作:把输入框的内容设置回原来的状态,这样就覆盖了默认的填充行为 autoCompleteTextView.setText(autoCompleteTextView.getText()); // 记得手动收起下拉列表,不然点击后可能还会停留在界面上 autoCompleteTextView.dismissDropDown(); } });
给你补全后的完整代码片段参考:
public class AutoCompleteViewActvitiy extends Activity { AutoCompleteTextView autoCompleteTextView; String[] language; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.support_simple_spinner_dropdown_item); // 这里是你的初始化逻辑(假设你之前已经写了这些) autoCompleteTextView = findViewById(R.id.your_auto_complete_view_id); language = new String[]{"Java", "Kotlin", "Python", "JavaScript"}; ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, language); autoCompleteTextView.setAdapter(adapter); // 关键:添加自定义点击监听,阻止默认填充 autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String selected = language[position]; // 保留用户原来输入的内容,不替换成选中项 autoCompleteTextView.setText(autoCompleteTextView.getText()); // 收起下拉菜单 autoCompleteTextView.dismissDropDown(); // 这里可以加你自己的逻辑,比如Toast提示选中了什么 // Toast.makeText(AutoCompleteViewActvitiy.this, "选中了:" + selected, Toast.LENGTH_SHORT).show(); } }); } }
原理其实很简单:AutoCompleteTextView默认在点击下拉项时会自动把选中的文本设置到输入框,我们在onItemClick里重新设置输入框的原有内容,就把这个默认行为覆盖掉了。你完全可以在这个方法里处理选中的选项,同时不让输入框的内容发生变化。
内容的提问来源于stack exchange,提问作者aj0822ArpitJoshi
相关产品推荐
相关产品推荐

