Comment fermer une boîte de Dialogue d'Alerte dans Android?
J'utilise le code suivant pour afficher à l'utilisateur un texte de base-zone d'entrée.
La première fois, tout fonctionne très bien. Toutefois, la deuxième fois j'appelle la boîte de dialogue, l'application se bloque.
Je suppose que c'est parce que je ne suis pas détruire l'EditText j'ai ajouté à la Vue. Alors...pour ceux beaucoup plus d'expérience que moi...quelle est la bonne façon de gérer cela?
Vous trouverez ci-dessous mon code et LogCat
final EditText ipInput = new EditText(this);
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(ipInput);
builder.setTitle("Enter Server IP Address: ");
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//STORE IP ADDRESS
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//CANCELLED
}
});
builder.create();
Et le "ing":
settings.setOnClickListener(new OnClickListener(){
public void onClick(View view){
builder.show();
}
});
Trace De La Pile:
02-24 02:08:55.759: E/AndroidRuntime(582): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
02-24 02:08:55.759: E/AndroidRuntime(582): at android.view.ViewGroup.addViewInner(ViewGroup.java:3011)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.view.ViewGroup.addView(ViewGroup.java:2900)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.view.ViewGroup.addView(ViewGroup.java:2880)
02-24 02:08:55.759: E/AndroidRuntime(582): at com.android.internal.app.AlertController.setupView(AlertController.java:401)
02-24 02:08:55.759: E/AndroidRuntime(582): at com.android.internal.app.AlertController.installContent(AlertController.java:241)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.app.AlertDialog.onCreate(AlertDialog.java:314)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.app.Dialog.dispatchOnCreate(Dialog.java:335)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.app.Dialog.show(Dialog.java:248)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.app.AlertDialog$Builder.show(AlertDialog.java:907)
02-24 02:08:55.759: E/AndroidRuntime(582): at pirelli.app.ScanBarcode$4.onClick(ScanBarcode.java:90)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.view.View.performClick(View.java:3110)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.view.View$PerformClick.run(View.java:11934)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.os.Handler.handleCallback(Handler.java:587)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.os.Handler.dispatchMessage(Handler.java:92)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.os.Looper.loop(Looper.java:132)
02-24 02:08:55.759: E/AndroidRuntime(582): at android.app.ActivityThread.main(ActivityThread.java:4123)
02-24 02:08:55.759: E/AndroidRuntime(582): at java.lang.reflect.Method.invokeNative(Native Method)
02-24 02:08:55.759: E/AndroidRuntime(582): at java.lang.reflect.Method.invoke(Method.java:491)
02-24 02:08:55.759: E/AndroidRuntime(582): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
02-24 02:08:55.759: E/AndroidRuntime(582): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
02-24 02:08:57.150: I/Process(582): Sending signal. PID: 582 SIG: 9
- Merci de poster le message d'erreur du journal aux côtés de l'affectés à des lignes de code.
- Ajout de journal des erreurs. Merci de prendre le temps 😀
Vous devez vous connecter pour publier un commentaire.
La façon dont je le vois, le problème n'est pas tant la finalité du Dialogue de l'Alarme Constructeur, mais que du Bouton. J'ai changé votre code ainsi:
(modifié la "finalité" les deux du constructeur et de l'EditText et créé l'EditText pour chaque nouvelle invocation). J'ai initialisé à la fois le contexte et le constructeur dans OnCreate:
Le problème, c'est que vous essayez de joindre même AlertDialog dans une Activité deux fois, essayez de créer un nouveau à chaque fois ou Activité d'appel.removeDialog(int) avant de fixer même, découvrez officielle dev guide ici:
La meilleure pratique est de toujours gérer votre boîte de dialogue de création de l'Activité.onCreateDialog() la méthode callback, a déclaré ici:
essayez de l'appeler:
rejeter est généralement positif et bouton annuler est généralement négatif bouton, mais c'est à vous. Vous pouvez également mettre en place un onDismissListener ou un onCancelListener pour obtenir des rappels de partout, cette boîte de dialogue a été créé.
Aussi,
retourne un pointeur vers la boîte de dialogue, il instancie. Ainsi, vous pouvez dire:
et appeler les méthodes de mDialog.