2013-03-01 16 views
6

Ho bisogno di gestire la fine di un DialogFragment (dopo una chiamata a .dismiss) - per esempio, vorrei mostrare un brindisi all'interno dell'attività che "contiene" il frammento dopo averlo chiuso.DialogFragment Close Evento

Come gestisco l'evento?

+0

Si vuole chiudere la finestra, e poi mostrare in un brindisi quando viene respinto? –

+0

sì, è quello che voglio fare – giozh

risposta

17

Ignora onDismiss() nel tuo DialogFragment oppure usa setOnDismissListener() nel blocco di codice in cui stai creando il frammento.

+0

Il riferimento dice di sovrascrivere onDismiss. Ora ho un altro problema. Come posso recuperare il contesto principale in cui creare il brindisi? – giozh

+0

Tutti ne trarrebbero vantaggio se avessi creato un'altra domanda per sapere come ottenere il contesto. Probabilmente ci sono altre risposte che puoi trovare che hanno già risposto a questa domanda. –

11

Ho affrontato un problema simile, ma volevo informare un'altra attività relativa alla chiusura della finestra di dialogo (non l'attività che ha creato e mostrato la finestra di dialogo).

Anche se si può semplicemente ignorare il metodo onDismiss() nel vostro DialogFragment come suggerito Austyn Mahoney, ma si può NON uso setOnDismissListener(), perché DialogFragment semplicemente non fornisce tale metodo (secondo: Android Developers DialogFragment Reference).

Ma ancora c'è un altro bel modo per informare qualsiasi altra attività sulla finestra di respingere, (ho trovato lì: DialogFragment and onDismiss), qui si tratta:

In primo luogo si dovrebbe rendere la vostra attività (la uno che si desidera passare informazioni sulla finestra respingere) implementare OnDismissListener:

public final class YourActivity extends Activity implements DialogInterface.OnDismissListener { 

    @Override 
    public void onDismiss(final DialogInterface dialog) { 
     //Fragment dialog had been dismissed 
    } 

} 

Sempre secondo Android Developers DialogFragment Reference DialogFragment implementa già OnDismissListener con onDismiss() metodo. È per questo che si dovrebbe ignorare e chiamare c'è il metodo onDismiss() cui si implementato in YourActivity:

public final class DialogFragmentImage extends DialogFragment { 

    @Override 
    public void onDismiss(final DialogInterface dialog) { 
     super.onDismiss(dialog); 
     final Activity activity = getActivity(); 
     if (activity instanceof DialogInterface.OnDismissListener) { 
      ((DialogInterface.OnDismissListener) activity).onDismiss(dialog); 
     } 
    } 

} 
+0

in onDismiss (..) come posso identificare una finestra di dialogo se ho più finestre di dialogo? – Anthea

+0

Quando la finestra di dialogo viene chiusa, il sistema passa il riferimento alla finestra di dialogo chiusa nell'argomento 'onDismiss (finestra di dialogo Dialog finale)'. Vedi: http://developer.android.com/reference/android/app/DialogFragment.html#onDismiss(android.content.DialogInterface) – Krzysiek

0

È possibile assegnare un evento su un pulsante mi piace

img_popup_timer_cancel.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getActivity(), "Cancel", Toast.LENGTH_SHORT).show(); 
       **getDialog().cancel();** 
      } 
     });