web-dev-qa-db-fra.com

Comment rejeter AlertDialog.Builder?

Dans le code suivant ci-dessous, comment puis-je fermer la boîte d'alerte? Je ne veux pas causer une fuite de mémoire. J'ai essayé le .dismiss () sur alertDialog, mais cela n'a pas fonctionné ...... Merci

// User pressed the stop button
public void StopMsg_button_action(View view){
    final EditText password_input = new EditText(this); // create an text input field
    password_input.setHint("Enter Password"); // put a hint in it
    password_input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); // change it to password type

    AlertDialog.Builder alertDialog = new Builder(this); // create an alert box
    alertDialog.setTitle("Enter Password"); // set the title
    alertDialog.setView(password_input);  // insert the password text field in the alert box
    alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { // define the 'OK' button
        public void onClick(DialogInterface dialog, int which) {
             String entered_password = password_input.getText().toString();
             if (entered_password.equals(my_password)) {
                locManager.removeUpdates(locListener); // stop listening for GPS coordinates
                startActivity(new Intent(Emergency_1Activity.this,Main_MenuActivity.class)); // go to main menu
             } else {
                 alert("Incorrect Password");
             }
        } 
    });
    alertDialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { // define the 'Cancel' button
        public void onClick(DialogInterface dialog, int which) {

        } 
    });
    alertDialog.show(); // show the alert box
}
25
sneaky

Qu'est-ce qui n'a pas fonctionné avec licencier ()?

Vous devriez pouvoir utiliser/ Dialog.dismiss () , ou Dialog.cancel ()

alertDialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { // define the 'Cancel' button
    public void onClick(DialogInterface dialog, int which) {
        //Either of the following two lines should work.
        dialog.cancel();
        //dialog.dismiss();
    } 
});
43
FoamyGuy

Avec le code suivant, vous pouvez afficher un ListBox AlertDialog et lorsque vous appuyez sur un élément, vous fermez le dialogue. L'ordre du code est important.

AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

String names[] ={"A","B","C","D"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext,Android.R.layout.simple_list_item_1,names);

LayoutInflater inflater = getLayoutInflater();
View convertView = (View)inflater.inflate(R.layout.list_layout, null);
ListView lv = (ListView) convertView.findViewById(R.id.listView1);
lv.setAdapter(adapter);
alertDialog.setView(convertView);
alertDialog.setTitle("List");
final AlertDialog ad = alertDialog.show();

lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
        //Toast.makeText(mContext, position, Toast.LENGTH_LONG).show();
        ad.dismiss();
    }
});
35
GMG

Le code est très simple:

final AlertDialog show = alertDialog.show();

enfin dans l'action du bouton par exemple:

show.dismiss();

Par exemple avec un alertdialog personnalisé:

 enter image description here

Code sur Java, vous pouvez créer un Object AlertDialog:

public class ViewAlertRating {

    Context context;
    public ViewAlertRating(Context context) {
        this.context = context;
    }

    public void showAlert(){

        AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        View alertView = inflater.inflate(R.layout.layout_test, null);
        alertDialog.setView(alertView);

        final AlertDialog show = alertDialog.show();

        Button alertButton = (Button) alertView.findViewById(R.id.btn_test);
        alertButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                show.dismiss();
            }
        });
    }
}

Code XML layout_test.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">


    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="Valoración"
        Android:id="@+id/text_test1"
        Android:textSize="20sp"
        Android:textColor="#ffffffff"
        Android:layout_centerHorizontal="true"
        Android:gravity="center_horizontal"
        Android:textStyle="bold"
        Android:paddingTop="10dp"
        Android:paddingBottom="10dp"
        Android:background="#ff37dabb"
        Android:paddingLeft="20dp"
        Android:paddingRight="20dp" />


    <LinearLayout
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:paddingLeft="20dp"
        Android:paddingRight="20dp"
        Android:layout_marginTop="15dp">

        <EditText
            Android:layout_width="match_parent"
            Android:layout_height="120dp"
            Android:id="@+id/edit_test"
            Android:hint="Descripción"
            Android:textColor="#aa000000"
            Android:paddingLeft="10dp"
            Android:paddingRight="10dp"
            Android:textColorHint="#aa72777a"
            Android:gravity="top" />
    </LinearLayout>

    <LinearLayout
        Android:orientation="horizontal"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:gravity="center_horizontal"
        Android:paddingTop="10dp"
        Android:paddingLeft="15dp"
        Android:paddingRight="15dp"
        Android:paddingBottom="15dp" >

        <LinearLayout
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" >

            <LinearLayout
                Android:orientation="horizontal"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:weightSum="1.00"
                Android:gravity="right" >

                <Button
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"
                    Android:text="Enviar"
                    Android:id="@+id/btn_test"
                    Android:gravity="center_vertical|center_horizontal"
                    Android:textColor="#ffffffff"
                    Android:background="@drawable/btn_flat_blue_selector" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

enfin, appelez Activité:

ViewAlertRating alertRating = new ViewAlertRating(this);
alertRating.showAlert();
19
Alex Zaraos

Vous devez utiliser cette méthode si vous ne voulez pas placer de boutons et avoir une mise en page personnalisée dans laquelle vous avez dit textview et que vous voulez fermer la boîte de dialogue d'alerte lorsque vous cliquez sur cette textview:

AlertDialog alertDialog = builder.show();

puis vérifier 

if(alertDialog != null && alertDialog.isShowing()){
      alertDialog.dismiss();
}

Cela est également vrai si vous souhaitez le supprimer ailleurs dans votre activité après avoir vérifié une condition.

14
Namrata Bagerwal

Cette méthode présente le code nécessaire .. de la réponse précédente de Namrata 

@SuppressLint("InflateParams")
private static void showDialog(Activity activity, int layoutId)
{
    LayoutInflater inflater = activity.getLayoutInflater();
    View dialoglayout = inflater.inflate(layoutId, null);

    AlertDialog.Builder builder = new AlertDialog.Builder(activity);
    builder.setView(dialoglayout);

    CustomDialog.doCustomLogic(activity, layoutId, dialoglayout);

    final AlertDialog alertDialog = builder.show();

    // caller assumes there will be a btn_close element present
    Button closeNowBtn = (Button) dialoglayout.findViewById(R.id.btn_close);
    closeNowBtn.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v)
        {
            alertDialog.dismiss();
        }
    });
}
9
Gene Bo

Remplacez simplement la méthode create et enregistrez l'instance de dialogue. Ensuite, vous pouvez appeler licencier

@Override
public AlertDialog create() {
    this.dialog = super.create();
    return this.dialog;
}

Quelque part au code:

dialog.dismiss();
3
vladaman

Pour rejeter ou annuler AlertDialog.Builder

dialog.setNegativeButton("إلغاء", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        dialogInterface.dismiss()
    }
});

Vous devez appeler dismiss() sur l'interface de dialogue.

2
Elhassan N

Au lieu de alertDialog.setNeutralButton, utilisez simplement alertDialog.setNegativeButton. Utilisez dialog.cancel(), car dialog.dismiss() n'est pas une méthode disponible pour les boîtes de dialogue d'alerte.

1
Martin Revert

j'ai essayé cela et j'ai travaillé!

.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
               alertDialog.setCancelable(true);
            }
        });
0
Marjan Dn