Android-动态添加视图到弹出对话框

Android-动态添加视图到弹出对话框,android,android-alertdialog,Android,Android Alertdialog,我有一个警报对话框,显示一些文本输入字段。 当我输入数据并单击“确定”时,它会保存此数据并将其显示在调用对话框的活动的自定义视图中 如果要编辑此数据,请单击自定义视图,并弹出相同的警报对话框。我希望预填充数据,并允许编辑和添加新数据。然而,我遇到了一个问题 当我尝试将现有数据添加到对话框时,视图将添加到视图的顶部,而不是我希望添加到的子视图。请看这里: 因此,“警报”对话框会从“我的活动”中放大视图: View dialogView = LayoutInflater.from(this).in

我有一个警报对话框,显示一些文本输入字段。 当我输入数据并单击“确定”时,它会保存此数据并将其显示在调用对话框的活动的自定义视图中

如果要编辑此数据,请单击自定义视图,并弹出相同的警报对话框。我希望预填充数据,并允许编辑和添加新数据。然而,我遇到了一个问题

当我尝试将现有数据添加到对话框时,视图将添加到视图的顶部,而不是我希望添加到的子视图。请看这里:

因此,“警报”对话框会从“我的活动”中放大视图:

View dialogView = LayoutInflater.from(this).inflate(R.layout.material_add_dialog, viewGroup, false);
builder.setView(dialogView);
但是这个
R.layout.material\u add\u对话框是主/俯视图

我有一个自定义适配器类,我也在使用它。下面是
getView()
方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = Objects.requireNonNull(mInflater).inflate(R.layout.add_material_popup_dialog_row, null);
    }

    Material material = mMaterials.get(position);

    EditText etMaterial = convertView.findViewById(R.id.material_add_text_material);
    EditText etSupplier = convertView.findViewById(R.id.material_add_text_supplier);
    EditText etWeight = convertView.findViewById(R.id.material_add_text_weight);
    EditText etAmount = convertView.findViewById(R.id.material_add_text_amount);

    etMaterial.setText(material.getMaterial());
    etSupplier.setText(material.getSupplier());
    etWeight.setText(material.getUnit());
    etAmount.setText(material.getAmount());

    return convertView;
}
因此,如果您看到
convertView
,这是正在膨胀的
R.layout.add_material_popup_dialog_row
,这是正在顶部添加的行

所以我的问题是,如何将这一行添加到dialogs视图的子视图中


谢谢。

您可以尝试将容器
线性布局创建为root
,然后
添加视图(convertView)
返回root
您只需要获取或创建子视图。如果存在:

View dialogView = LayoutInflater.from(this).inflate(R.layout.material_add_dialog, viewGroup, false);
View subView = dialogView.findViewById(R.id.mySubViewId);
或者,您可以创建新视图并将其添加到当前视图:

//You would need to create the appropriate view for your use-case.
View view = new View();
dialogView.addView(view);

据我所知,适配器中的
getView()
方法构建视图/行,并将其添加到
builder.setView(dialogView)中的视图集。因此,我需要关于如何在适配器中拦截该进程的建议,我想……您可以发布对话框视图的XML吗?