在对话框中动态添加视图

时间:2019-06-28 11:33:54

标签: java android view dialog

我正在尝试制作由2个EditText和1个按钮组成的对话框。通过单击其他按钮,您可以添加另一个2x EditText和1x Button。此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);
}

}

下图是对话框的概念: Picture

1 个答案:

答案 0 :(得分:0)

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

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