Android自定义AlertDialog中Exposed Dropdown Menu无下拉选项问题
问题根因
核心错误在于:你提前用LayoutInflater加载了一次布局、给这个实例里的下拉控件设置了适配器,但后续调用builder.setView()时传入的是布局资源ID而非你已经处理好的View实例,导致弹窗最终加载的是全新的、没有绑定适配器的布局实例,自然点击没有下拉菜单弹出。
修复方案
仅需修改createButton的点击事件逻辑,将builder.setView(R.layout.dialog_main_createremote)改为builder.setView(inflatedView)即可,修改后的点击事件代码如下:
createButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(MainActivity.this); LayoutInflater inflater = LayoutInflater.from(MainActivity.this); final View inflatedView = inflater.inflate(R.layout.dialog_main_createremote, null); AutoCompleteTextView actv = inflatedView.findViewById(R.id.dialog_main_dropdown); String categories[] = getResources().getStringArray(R.array.categories); actv.setAdapter(new ArrayAdapter(MainActivity.this, R.layout.dropdown_item, categories)); // 此处改为传入你已经完成适配器绑定的View实例,不要传布局资源ID builder.setView(inflatedView); builder.setTitle("Set control params"); builder.setNegativeButton("Nope", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.setPositiveButton("Okey", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.show(); } });
可选排查项
如果修改后仍有异常,可以检查以下两项配置:
- 确认
res/values/arrays.xml中已经正确定义了categories字符串数组,没有为空、资源名拼写错误的问题 - 确认你的App使用了Material Components主题,否则Material风格的控件可能无法正常运行
额外提示
如果后续需要获取用户输入的名称和选中的分类,也要从inflatedView实例中查找对应控件取值,不要从其他布局实例中查找。
内容的提问来源于stack exchange,提问作者GTMF99
相关产品推荐
相关产品推荐

