9
votes

Empêcher la boîte de dialogue à plusieurs reprises lors de la reprise d'activité

Dans mon application Android, afin de demander à l'utilisateur s'il veut reprendre un jeu actuel, j'affiche une boîte de dialogue disant "Voulez-vous reprendre le jeu actuel? Oui - Non" sur l'activité de jeu principale. < / p>

La chose est que si je reprends diverses fois cette activité sans répondre à la boîte de dialogue, je reçois plusieurs dialogues, sur les autres, ce qui n'est évidemment pas mon objectif.

Je pourrais facilement éviter ce comportement à l'aide d'un Var booléen, mais je me demandais si la classe de dialogue avait une sorte d'option empêchant d'être dupliquée ou de quelque chose du genre.


3 commentaires

Vous pouvez essayer la dialogue.isshowing ()


Lorsque vous quittez l'application et que vous ouvrez à nouveau, l'activité est redémarré et, je suppose, à cause de votre formation de code, la boîte de dialogue est redémarré, mais peut-être été jamais fermé auparavant .. Peut-être que si vous mettez en pause () {Dialog.dismiss (); } il pouvait acclamer votre problème


isfinissant () ?


6 Réponses :


8
votes

Vous pouvez utiliser Singleton Motif, pourrait être approximativement comme ceci:

Dialog myDialog = null;


public void showDialog() {
    if(myDialog == null) {
        /* show your dialog here... */
        myDialog = ...
    }
}


public void hideDialog() {
    if(myDialog != null) {
        /* hide your dialog here... */
        myDialog = null;
    }
}


1 commentaires

Bonjour Sam, je suis confronté au même problème, mais j'utilise alertdialogbuilder pour créer une boîte de dialogue, n'importe quelle solution .. ??



4
votes

plutôt ensuite faire des hacks ou utiliser des booléens, vous pouvez utiliser Le Méthode donnée par Google elle-même xxx

Il renvoie une valeur booléenne Si la boîte de dialogue s'affiche actuellement.


0 commentaires

5
votes
private Dialog mDialog;

private void showDialog(String title, String message) {
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this)
            .setTitle(title)
            .setMessage(message);

    // Dismiss any old dialog.
    if (mDialog != null) {
        mDialog.dismiss();
    }

    // Show the new dialog.
    mDialog = dialogBuilder.show();
}

0 commentaires

0
votes

Utilisation méthode isadded (),

EXEMPLE KOTLIN: P>

private fun dialogShow(dialog: DialogFragment?) {
        val fragmentManager: FragmentManager = (context as MyActivity).fragmentManager
        dialog?.show( fragmentManager,TAG)
    }


0 commentaires

2
votes

J'ai également rencontré un tel problème lorsque j'ai essayé de remplacer la méthode ondismiss () sans super.ondismiss (boîte de dialogue);

Il s'avère que j'ai supprimé super.ondismiss (dialogue) et à cause de cela, les dialogues ont été dupliqués

Retour ajouté, l'erreur a disparu.

J'espère que quelqu'un aidera


0 commentaires

0
votes

Vérifier la boîte de dialogue Affiche déjà ou non

private Dialog mDialog;

private void showDialog(String title, String message) {
    //stop multiple dialog window
    if(dialog != null && dialog.isShowing()) {
        return;
    }
    
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this)
            .setTitle(title)
            .setMessage(message);

    dialog = dialogBuilder.show();
}


0 commentaires