【发布时间】:2016-09-16 18:47:58
【问题描述】:
我有一个对话框,我应该在EditText 中填写一些详细信息。如果在编辑文本为空时单击肯定按钮,则会显示带有消息的 Snackbar 并关闭对话框。但是,当我再次打开对话框时,应用程序崩溃了:java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first 错误。
我是这样夸大视图的:
LayoutInflater inflater = this.getLayoutInflater();
addVenueDialog = inflater.inflate(R.layout.add_venue_dialog, null);
这是打开对话框并检查编辑文本是否为空的java代码:
case R.id.nav_add_venue:
if (dialog == null) {
LayoutInflater inflater = this.getLayoutInflater();
View addVenueDialog = inflater.inflate(R.layout.add_venue_dialog, null);
vName = (EditText) addVenueDialog.findViewById(R.id.vName);
vAddress = (EditText) addVenueDialog.findViewById(R.id.vAddress);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Title");
builder.setView(addVenueDialog);
builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if (isNetworkAvailable()) {
if (vName.getText().toString().isEmpty()) {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "V name cannot be empty", Snackbar.LENGTH_SHORT);
snackbar.show();
} else if (vAddress.getText().toString().isEmpty()) {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "V address cannot be empty", Snackbar.LENGTH_SHORT);
snackbar.show();
} else {
mDatabase.child("vs").child(user.getUid()).child("V name").setValue(vName.getText().toString());
mDatabase.child("vs").child(user.getUid()).child("V address").setValue(vAddress.getText().toString());
}
} else {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "No internet connection", Snackbar.LENGTH_SHORT);
snackbar.show();
}
}
});
dialog = builder.create();
}
dialog.show();
break;
关闭后再次打开对话框时,我不知道为什么应用程序崩溃。
请告诉我。
【问题讨论】:
-
崩溃是因为,如错误消息中所示,您正在添加已在别处添加的视图。即,在第一次创建警报对话框时。当您像这样重新创建对话框时,您不能简单地重新添加您的视图。
-
@njzk2 那么,解决方案是什么?
标签: java android layout-inflater illegalstateexception android-inflate