7
votes

L'enfant spécifié a déjà un parent

J'ai créé le alertdialog à l'aide du constructeur. Il montre lorsque nous appelons la méthode show () . J'ai le bouton Annuler dans cette boîte de dialogue. Je peux annuler cette boîte de dialogue en cliquant sur le bouton Annuler. Mon problème est une fois que j'ai annulé l'affichage de la boîte de dialogue, je ne peux plus afficher la boîte de dialogue. Il jette une exception comme: xxx


2 commentaires

Affichez le code, où vous invoquez l'alertdialog.


Autrement appelé enlèvement d'enlèvement.


4 Réponses :


19
votes

N'affichez pas la même boîte de dialogue, créez un nouveau.

Cela se produit parce que vous essayez de réutiliser la boîte de dialogue déjà créée (probablement à Oncreate ) et utilisé une fois. Il n'y a pas de problème dans la réutilisation d'une boîte de dialogue, mais comme dans la question que l'enfant spécifié (la vue) a déjà un parent (la boîte de dialogue). Vous pouvez continuer à supprimer le parent ou que vous pouvez créer un nouveau parent comme: - xxx


1 commentaires

Cela devrait être un commentaire !!



3
votes

Supprimer la boîte de dialogue précédente avant d'en ajouter un nouveau. Si vous continuez à ajouter une nouvelle boîte de dialogue chaque fois que cela restera dans votre mémoire et votre application consommera plus de batterie.

Appelez Supprimer la vue ou RemoveAllViews () sur la mise en page dans laquelle vous ajoutez votre boîte de dialogue.


1 commentaires

Peut-être maintenant pas pertinent pour les versions Android actuelles.



3
votes

Vous devez faire ceci:

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 commentaires

1
votes

Déplacez tout le code du constructeur en dehors de la méthode OncreateDialog code>.

Par exemple est le guide de dialogues Android Mise à jour: p>

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 commentaires