Comment rejeter AlertDialog.Builder?

Dans le code suivant ci-dessous, Comment puis-je rejeter la zone d'alerte? Je ne veux pas causer de 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
}
23
demandé sur Goo 2012-07-02 00:01:58

9 réponses

Qu'est-ce qui n'a pas fonctionné à propos de dismiss()?

Vous devriez pouvoir utiliser l'une ou l'autre boîte de dialogue .rejeter(), ou boîte de Dialogue.annuler()

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();
    } 
});
42
répondu FoamyGuy 2013-08-18 14:17:08

Avec le code suivant, vous pouvez afficher une ListBox AlertDialog et lorsque vous appuyez sur un élément, vous fermez la boîte de dialogue. L'ordre du code est importan.

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();
    }
});
33
répondu GMG 2015-02-27 16:17:58

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é:

entrez la description de l'image ici

Code sur java, vous pouvez créer un objet 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, appel à L'Activité:

ViewAlertRating alertRating = new ViewAlertRating(this);
alertRating.showAlert();
17
répondu Alex Zaraos 2015-10-13 15:48:21

Vous devez utiliser cette façon si vous ne voulez pas mettre de boutons et avoir une mise en page personnalisée dans laquelle vous avez say textview et que vous voulez fermer la boîte de dialogue d'alerte en cliquant sur ce textview:

AlertDialog alertDialog = builder.show();

Puis cochez

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

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

11
répondu Namrata Bagerwal 2014-09-30 06:55:09

Cette méthode affiche 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();
        }
    });
}
7
répondu gnB 2017-03-27 16:30:03

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

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

Quelque part au code:

dialog.dismiss();
3
répondu vladaman 2014-05-30 12:46:38

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
répondu Martin Revert 2017-01-24 06:48:45

J'ai essayé et travaillé!

.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
               alertDialog.setCancelable(true);
            }
        });
0
répondu Marjan Dn 2017-01-02 07:55:26

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.

0
répondu Elhassan N 2017-10-30 23:45:29