web-dev-qa-db-fra.com

Fermer une boîte de dialogue d'alerte personnalisée en cliquant sur un bouton

Je n'arrive pas à fermer mon dialogue d'alerte. J'utilise un gonfleur de mise en page pour créer le dialogue, je ne sais donc pas comment je ferais pour fermer la chose une fois que j'en aurai fini. Le code est ci-dessous:

AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
DialogInterface dia = new DialogInterface();

//Create a custom layout for the dialog box
LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);

TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
Button add_item = (Button)layout.findViewById(R.id.add_button);

add_item.setOnClickListener(new OnClickListener()
{
        @Override
        public void onClick(View v)
        {
        //Need this to close the alert dialog box
        }
});

title.setText(workout_items[position]);
dialog.setView(layout);
dialog.show();

Je ne peux pas appeler terminer, car cela ferme la vue liste depuis laquelle la boîte de dialogue d'alerte est lancée et les appels dialog.dismiss ne sont pas disponibles pour moi.

Que pensez-vous que je devrais faire pour résoudre ce problème?

26
Eric
AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
DialogInterface dia = new DialogInterface();

//Create a custom layout for the dialog box
LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);

TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
Button add_item = (Button)layout.findViewById(R.id.add_button);

title.setText(workout_items[position]);
dialog.setView(layout);

AlertDialog alertDialog = dialog.create();

add_item.setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        alertDialog.dismiss();
    }
});


alertDialog.show();
31
Pasha

fais-le comme ça,

add_item.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                        dialog.dismiss();
                }
            });
16
Hades

Essaye ça:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    LayoutInflater inflater = getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.brush_opts_dialog,null);

    builder.setView(dialogView);


    closeBtn = (Button)dialogView.findViewById(R.id.close_btn);


   final AlertDialog dialog = builder.create();

    closeBtn .setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    dialog.show();

Vous devez utiliser AlertDialog.Builder pour "créer" le dialogue d'alerte lui-même. Appelez ensuite la méthode create () sur l'objet AlertDialog.Builder. Cette méthode retourne un objet AlertDialog, ce qui vous permet d’appeler la méthode rejeter ().

Vous ne devriez pas avoir à le créer plusieurs fois, ni utiliser aucun objet DialogInterface. Cela fonctionne pour moi. Faites-moi savoir comment ça se passe pour vous.

12
Nlinscott

J'ai modifié votre code plz check ..

   AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
    DialogInterface dia = new DialogInterface();

    //Create a custom layout for the dialog box
    LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);

    TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
    Button add_item = (Button)layout.findViewById(R.id.add_button);



    final AlertDialog Dial = alertDialog.create();
    title.setText(workout_items[position]);
    Dial.setView(layout);

    AlertDialog alertDialog = dialog.create();

    add_item.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            Dial.dismiss();
        }
    });


    Dial.show();

Vient d'ajouter  

final AlertDialog Dial = alertDialog.create (); et changer dialog.setView (mise en page); à Dial.setView (mise en page);

maintenant, il suffit d'appeler Dial.dismiss (); in onclick listener .. fonctionne bien pour moi.

3
Abdus Salam

utilisez ce code dans votre classe:

Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom);
((Button) dialog.findViewById(R.id.button))
   .setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        dialog.dismiss();
    }
});
dialog.show();

et créez le fichier custom.xml, puis collez ce code à l'intérieur:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent">
    <Button
        Android:id="@+id/button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text=" Ok "/>
</RelativeLayout>

source: https://www.mkyong.com/Android/android-custom-dialog-example/

et si vous n'aimez pas le code ci-dessus, consultez le lien ci-dessous: http://thedeveloperworldisyours.com/Android/prevent-alertdialog-closing-button-clicked/

1
سعید .م

Vous devez implémenter DialogInterface.OnClickListener plutôt que View.OnClickListener. alors dialog.dismiss () sera disponible.

new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
       dialog.dismiss();
}
}
0
nexDev

Vous obtenez une erreur, essayez ce code

   dialog.setView(layout);

   final AlertDialog alertDialog = dialog.create();

   add_item.setOnClickListener(new OnClickListener(){
    @Override
     public void onClick(View v)
        {
          if (alertDialog != null && alertDialog.isShowing()) {
              alertDialog.dismiss();
        }
      }
    });
   alertDialog.show();
0
StrTOInt

Essayez dialog.cancel (); dans votre auditeur onclick. Ça devrait marcher.

0
Ungureanu Liviu