Java – Nested warning dialog

Nested warning dialog… here is a solution to the problem.

Nested warning dialog

I’m facing an unsolvable (for me) problem, nested AlertDialog uses 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 worked fine, but when I called it the 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 have searched on this forum without success.

If anyone has a clue. Thanks in advance 🙂

Solution

You can do this – the problem is that if you use EditText a second time it already has a parent – you need to create a new (): in your onClick every time

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();
    }
});

Related Problems and Solutions