java - 在 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);
}
}
下图还有对话框的概念: 图
解决方案
此问题可能是由于查看参考。检查 v.getParent() 是否是您要删除的视图。
对于测试,您可以使用“removeViewAt(int index)”方法。传递一个索引并检查视图是否在索引处被删除。
推荐阅读
- javascript - 修改正则表达式以禁止空格
- python - Class function returning 'None'
- python - 从存储在数组中的字符串中删除单引号
- json - 如何将 mock_open 与 json.load() 一起使用?
- python - 使用 Anaconda 和 Python 3.65 进行网页抓取
- oracle - 为 flyway 加密与 Oracle 的 JDBC 连接
- azure - 如何在 ARM 模板中多次运行相同的脚本?
- excel - 在 Case Select 语句中使用数组作为参数
- java - 为自定义构建器设置类
- elasticsearch - 如何在 elasticsearch DB 中搜索确切的字符串