J'ai créé le alertdialog code> à l'aide du constructeur. Il montre lorsque nous appelons la méthode
show () code>. J'ai le bouton Annuler em> 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:
4 Réponses :
Cela se produit parce que vous essayez de réutiliser la boîte de dialogue déjà créée (probablement à Oncreate code>) 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: - p>
Cela devrait être un commentaire !!
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. P>
Appelez Supprimer la vue ou RemoveAllViews () sur la mise en page dans laquelle vous ajoutez votre boîte de dialogue. P>
Peut-être maintenant pas pertinent pour les versions Android actuelles.
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); }
Déplacez tout le code du constructeur en dehors de la méthode Par exemple est le guide de dialogues Android Mise à jour: p> OncreateDialog code>.
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();
Affichez le code, où vous invoquez l'alertdialog.
Autrement appelé enlèvement d'enlèvement.