Reputation: 93
I'm facing a unreasolvable (for me) problem with nested AlertDialog using the following code
final AlertDialog.Builder button_cook_action = new AlertDialog.Builder(this);
final EditText cookMl = new EditText(this);
cookMl.setInputType(InputType.TYPE_CLASS_NUMBER);
button_cook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
button_cook_action.setTitle(R.string.kitchen_recipe_button_cook)
.setMessage(R.string.kitchen_recipe_button_cook_volume)
.setView(cookMl)
.setPositiveButton(R.string.Yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
AlertDialog.Builder builderCooking = new AlertDialog.Builder(RecipeActivity.this);
builderCooking.setTitle(recipe.getName())
.setMessage("message");
builderCooking.show();
}
})
.setNegativeButton(R.string.No, null)
.show();
}
});
The first call works fine, but when i call it for a second time it gave me :
FATAL EXCEPTION: main
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
I already search in this forum but without any success.
If someone has a clue. Thanks in advance :)
Upvotes: 3
Views: 1723
Reputation: 39549
You can do it like this - the problem was before if you use the EditText
a second time it already has a parent - you need to create a new one each time inside your onClick()
:
button_cook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder button_cook_action = new AlertDialog.Builder(this);
final EditText cookMl = new EditText(this);
cookMl.setInputType(InputType.TYPE_CLASS_NUMBER);
button_cook_action.setTitle(R.string.kitchen_recipe_button_cook)
.setMessage(R.string.kitchen_recipe_button_cook_volume)
.setView(cookMl)
.setPositiveButton(R.string.Yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
AlertDialog.Builder builderCooking = new AlertDialog.Builder(RecipeActivity.this);
builderCooking.setTitle(recipe.getName())
.setMessage("message");
builderCooking.show();
}
})
.setNegativeButton(R.string.No, null)
.show();
}
});
Upvotes: 3
Reputation: 4091
The problem is in the setView of your alertDialog. You have to inflate the layout everytime your create your dialog. In your case, your are inflating an EditText. So either you should create your EditText inside button_cook onClickListener or adopt the solution as posted by @ligi.
Upvotes: 1