2012-09-21 8 views
8

Mi actividad abre un cuadro de diálogo. Cuando se cierre necesito que se ejecute la función ReloadTable(). Así que estoy tratando de usar setOnDismissListener pero no se activa. ¿Podría alguien por favor ayudar a lo que estoy haciendo mal?AlertDialog setOnDismissListener no funciona

Gracias!

AlertDialog.Builder builder; 
AlertDialog alertDialog; 
Context mContext = getApplicationContext(); 
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); 
View layout = inflater.inflate(R.layout.transaction, null); 
builder = new AlertDialog.Builder(new ContextThemeWrapper(TransactionsList.this , R.style.dialogwithoutdim)); 
builder.setView(layout); 
alertDialog = builder.create(); 
alertDialog.setOnDismissListener(new OnDismissListener() { 
    public void onDismiss(final DialogInterface dialog) { 
     ReloadTable(); 
    } 
}); 

builder.show(); 
+0

Esta es la razón por la que no funciona para usted, probablemente: http://stackoverflow.com/ a/18269965/89818 – caw

Respuesta

1

En este caso se debe utilizar alertDialog.setOnCancelListener(listener) y alertDialog.setOnDismissListener obras con dismissDialog(id).

+0

Esto no funciona. No estoy descartando el diálogo. Solo espero presionar el botón Atrás para descartar el diálogo ... ¿por qué no se activaría el descarte? – lumpawire

+0

@ Override \t public void onBackPressed() { \t dismissDialog (id) \t \t super.onBackPressed(); \t} ¿Has probado setOnCancelListener con el botón Atrás presionado? – Yahor10

+0

no. no funciona – lumpawire

3

OK ... lo descubrí por mi cuenta.

Tuve que implementar DialogInterface.OnCancelListener y agregar el método onCancel. ¡Funcionó!

+3

'setOnDismissListener' solo está disponible en la API 17, creo que ese era su problema. –

+0

@YoannHercouet En realidad, API nivel 1 ?! http://developer.android.com/reference/android/app/Dialog.html#setOnDismissListener%28android.content.DialogInterface.OnDismissListener%29 – caw

+0

Solo para establecer a través de AlerDialog.Builder. En AlertDialog desde el nivel de la API 1. – Enyby

9
public class MyActivity extends Activity implements DialogInterface.OnCancelListener{ 
    @Override 
    public void onCreate(Bundle state) { 
     ..... 
     alertDialog.setOnCancelListener(this); 
     alertDialog.show(); 
    } 
    @Override 
    public void onCancel(DialogInterface dialog) { 
     dialog.dismiss(); 
     ..... 
    } 
} 
+1

Quiero que se cancele cuando se abandona el diálogo me diste una idea para usar OnDismissListener .... @ upvoted ... me salvaste el día ........... gracias muchas gracias ...... –

1

Encontré el problema real.

Debe llamar a .show en el cuadro de diálogo, no en el constructor.

Pruébalo :)

4

Tienes que setOnCancelListener a la AlertDialog.Builder:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
       this); 
alertDialogBuilder.setOnCancelListener(new DialogInterface.OnCancelListener() { 
      @Override 
      public void onCancel(DialogInterface dialog) { 
       dialogmenu = false; 
      } 
     }) 
Cuestiones relacionadas