2012-07-01 15 views
21

En el siguiente código, ¿cómo descarto la casilla de alerta? No quiero causar una pérdida de memoria. Probé la .dismiss() en alertDialog, pero que no funcionó ... GraciasCómo descartar AlertDialog.Builder?

// 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 
} 

Respuesta

39

Lo que no funcionó sobre Rechazar()?

Usted debe ser capaz de utilizar cualquiera Dialog.dismiss(), o 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(); 
    } 
}); 
+0

¿me puede mostrar en el código? Estoy muy confundido aquí, gracias – sneaky

+0

seguro, ver mi edición. – FoamyGuy

+13

'AlertDialog.Builder' no tiene el método' cancelar' – xmen

1

En lugar de utilizar simplemente alertDialog.setNeutralButtonalertDialog.setNegativeButton. Use dialog.cancel(), porque dialog.dismiss() no es un método disponible para los cuadros de diálogo de alerta.

1

Simplemente anule crear método y guarde la instancia de diálogo. A continuación, puede llamar a despedir

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

En algún lugar en el código:

dialog.dismiss(); 
10

Debe utilizar esta forma si no quiere poner ningún botón y tienen un diseño personalizado en el que se tiene decir textview y desea cerrar el cuadro de diálogo de alerta al hacer clic en esa vista de texto:

AlertDialog alertDialog = builder.show(); 

luego check

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

Esto también es válido si desea descartarlo en otro lugar de su actividad después de verificar alguna condición.

+1

perfecta y la mejor respuesta con gran explicación –

28

Con el siguiente código puede mostrar un ListBox AlertDialog y cuando presiona sobre un elemento, cierra el cuadro de diálogo. El orden del código es importante.

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(); 
    } 
}); 
+0

¡Perfecto! ¡Muchas gracias! – NightFury

+0

Eso es lo que estaba buscando. ¡¡¡¡Gracias!!!! – Vicky

+0

¡Gracias! La clave aquí es descartar el diálogo creado con alertDialog.show(). Crear un diálogo desde el constructor y llamar a cerrar ese diálogo no descarta el mismo diálogo que creamos cuando llamamos a show(). Este me tuvo perplejo por un poco =) –

7

Este método demos el código que se necesita .. De la respuesta anterior 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(); 
     } 
    }); 
} 
13

El código es muy simple:

final AlertDialog show = alertDialog.show(); 

finalmente en la acción del botón, por ejemplo:

show.dismiss(); 

Por ejemplo Le alertdialog con un encargo:

enter image description here

Código de Java, se podría crear un objeto AlertDialog: XML

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(); 
      } 
     }); 
    } 
} 

Código 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> 

por último, un llamamiento a la actividad:

ViewAlertRating alertRating = new ViewAlertRating(this); 
alertRating.showAlert(); 
+1

gran solución. ¡Me ayudo mucho! –

0

He intentado esto y funcionó!

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

Gracias ............. – Varma

0

Para descartar o cancelar AlertDialog.Builder

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

Tienes que llamar dismiss() en la interfaz de diálogo.

Cuestiones relacionadas