the specified child already has a parent

后端 未结 4 1721
梦如初夏
梦如初夏 2020-12-20 18:17

I created the AlertDialog using the builder. It shows when we call the show() method. I have the cancel button in that dialog. I can cance

相关标签:
4条回答
  • 2020-12-20 18:29

    Move all the code of the builder outside of the onCreateDialog method.

    For instance here is the Android Dialogs guide updated :

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.dialog_fire_missiles)
        .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int id) {
                 // Send the positive button event back to the host activity
                 mListener.onDialogPositiveClick(NoticeDialogFragment.this);
             }
        })
        .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                // Send the negative button event back to the host activity
                mListener.onDialogNegativeClick(NoticeDialogFragment.this);
            }
        });
    
    final Dialog dialog = builder.create();
    
    DialogFragment fragment = new DialogFragment {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            // Build the dialog and set up the button click handlers
            return dialog;
        }
    };
    fragment.show();
    
    // and later ...
    fragment.show();
    
    0 讨论(0)
  • 2020-12-20 18:31

    remove the previous dialog before adding new one. If you continue adding new dialog each time this will stay in your memory and your app will consume more battery.

    call remove view or removeAllViews() on layout in which you are adding your dialog.

    0 讨论(0)
  • 2020-12-20 18:44

    You must be doing this:

    AlertDialog.setView(yourView);
    

    You can over come this error by:

    if (yourView.getParent() == null) {
        AlertDialog.setView(yourView);
    } else {
        yourView = null; //set it to null
        // now initialized yourView and its component again
        AlertDialog.setView(yourView);
    }
    
    0 讨论(0)
  • 2020-12-20 18:54

    Don't show the same dialog, create a new one.

    This is happening because you are trying to re-use the dialog which was already created (Probably at onCreate)and used once. There is no issue in reusing a dialog but as in the question the the specified child (the view) already has a parent (the dialog).You could either continue by removing the parent or you can create a new parent like :-

    alertDialog=new AlertDialog(Context);
    alertDialog.setView(yourView);
    alertDialog.show();
    
    0 讨论(0)
提交回复
热议问题