同Activity内选中自动完成名称后自动填充EditText字段失败
解决EditText赋值后不显示内容的问题
常见排查与修复方案
确认EditText引用无误
一定要在setContentView之后通过findViewById获取控件实例,避免引用为空或错配ID:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 正确时机获取控件 EditText targetEt = findViewById(R.id.et_target); }保证赋值在UI线程执行
如果自动完成的选中回调是在子线程触发的,直接调用setText不会生效,必须切回UI线程:runOnUiThread(() -> { targetEt.setText("要填充的内容"); });检查EditText的显示状态与输入类型
要是EditText设置了inputType="password"或者visibility="invisible/gone",文本会被隐藏或显示为密文,调整成普通可见状态:targetEt.setInputType(InputType.TYPE_CLASS_TEXT); targetEt.setVisibility(View.VISIBLE);验证选中事件是否触发
在OnItemClickListener里加日志,确认选中动作确实被执行,且要填充的内容不为空:autoCompleteView.setOnItemClickListener((parent, view, position, id) -> { String selected = parent.getItemAtPosition(position).toString(); Log.d("AutoComplete", "选中内容:" + selected); if (!TextUtils.isEmpty(selected)) { targetEt.setText(selected); } });排查是否有代码覆盖内容
检查Activity中所有操作该EditText的代码,有没有在赋值后被其他逻辑(比如文本监听、刷新方法)清空或覆盖内容。
完整示例代码
public class MainActivity extends AppCompatActivity { private AutoCompleteTextView autoCompleteName; private EditText etName, etPhone; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化控件 autoCompleteName = findViewById(R.id.auto_complete_name); etName = findViewById(R.id.et_name); etPhone = findViewById(R.id.et_phone); // 设置自动完成数据源 String[] userNames = {"张三", "李四", "赵六"}; ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, userNames); autoCompleteName.setAdapter(adapter); // 选中后填充字段 autoCompleteName.setOnItemClickListener((parent, view, position, id) -> { String selectedName = parent.getItemAtPosition(position).toString(); etName.setText(selectedName); // 模拟填充对应手机号 switch (selectedName) { case "张三": etPhone.setText("13800138000"); break; case "李四": etPhone.setText("13900139000"); break; case "赵六": etPhone.setText("13700137000"); break; } }); } }
内容的提问来源于stack exchange,提问作者Daniel Baria
相关产品推荐
相关产品推荐

