Android Studio Material Design Autocomplete下拉项选中后无法自动填充问题
问题根因及解决方法
1. 下拉项布局抢占了点击事件
你在fixed_amount_list.xml的TextView中额外设置了android:clickable="true"和android:focusable="true",这两个属性会让子View优先消费点击事件,导致父控件AutoCompleteTextView无法接收到条目选中的回调。
解决方法:删除这两个属性即可,修正后的布局代码:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:ellipsize="end" android:maxLines="1" android:textAppearance="?attr/textAppearanceSubtitle1"/>
2. 未设置条目选中监听
你没有给AutoCompleteTextView设置OnItemClickListener,选中条目后的赋值、收起菜单逻辑需要手动实现。
3. 适配器初始化代码书写错误
你代码中写的new Adapter(...)是错误的,应该明确指定为ArrayAdapter,否则会编译报错。
修正后的AmountActivity完整代码
public class AmountActivity extends AppCompatActivity { private AutoCompleteTextView order_transfert_amound_fixed_textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_amount); order_transfert_amound_fixed_textView = findViewById(R.id.order_transfert_amound_fixed_textView); // 修正适配器初始化代码 ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.fixed_amount_list, AMOUNTS); order_transfert_amound_fixed_textView.setAdapter(adapter); // 添加选中监听 order_transfert_amound_fixed_textView.setOnItemClickListener((parent, view, position, id) -> { // 获取选中的金额 String selectedAmount = (String) parent.getItemAtPosition(position); // 赋值到输入框 order_transfert_amound_fixed_textView.setText(selectedAmount); // 收起下拉菜单 order_transfert_amound_fixed_textView.dismissDropDown(); }); } private static final String[] AMOUNTS = new String[] { "10.00", "15.00", "20.00", "25.00", "30.00" }; }
可选优化点
如果不需要用户手动输入金额,只想让用户从下拉列表选择,可以给AutoCompleteTextView添加android:editable="false"属性,避免弹出输入法。
内容的提问来源于stack exchange,提问作者Horly Andelo
相关产品推荐
相关产品推荐

