首页 > 解决方案 > 在 Dialog 中动态添加 Views

问题描述

我正在尝试制作包含 2x EditText 和 1x Buttons 的对话框。通过单击附加按钮,您可以添加另一个 2x EditText 和 1x 按钮。这个 1x 按钮提供删除这个添加的对。当我尝试使用应该添加另一个视图的按钮时,它工作正常。但是删除视图的按钮仅适用于第一对。我怎么能用 android:onClick 做到这一点,因为我试图买它崩溃了。

这是我的 Dialog 类代码:

public class ExampleDialog extends AppCompatDialogFragment {
private EditText editTextUsername;
private EditText editTextPassword;
private ExampleDialogListener listener;
private LinearLayout parentLinearLayout;
private Context mContext;
Button dodaj,usun;



@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.dialog_template, null);

    builder.setView(view)
            .setTitle("Login")
            .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            })
            .setPositiveButton("ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    String username = editTextUsername.getText().toString();
                    String password = editTextPassword.getText().toString();
                    listener.applyTexts(username, password);
                }
            });

    editTextUsername = view.findViewById(R.id.edit_username);
    editTextPassword = view.findViewById(R.id.edit_password);
    parentLinearLayout = (LinearLayout) view.findViewById(R.id.parent_linear_layout);
    dodaj = view.findViewById(R.id.add_field_button);
    usun = view.findViewById(R.id.delete_button);

    dodaj.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final View rowView = inflater.inflate(R.layout.field, null);
            // Add the new row before the add field button.
            parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount() - 1);
        }
    });

    usun.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            parentLinearLayout.removeView((View) v.getParent());
            usun = v.findViewById(R.id.delete_button);
        }
    });

    return builder.create();
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        listener = (ExampleDialogListener) context;

    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString() +
                "must implement ExampleDialogListener");
    }
}

public void contexta(Context context)
{
    this.mContext = context;
}

public interface ExampleDialogListener {
    void applyTexts(String username, String password);
}

}

下图还有对话框的概念:

标签: javaandroidviewdialog

解决方案


此问题可能是由于查看参考。检查 v.getParent() 是否是您要删除的视图。

对于测试,您可以使用“removeViewAt(int index)”方法。传递一个索引并检查视图是否在索引处被删除。


推荐阅读