2012-03-24 11 views

risposta

4

Ignora onDismiss() di DialogFragment o quando si crea la finestra di dialogo sottostante, impostare un listener con setOnDimissListener().

+16

Questo informa il 'DialogFragment' che è stato rimosso, ma non è il frammento del genitore che è quello che la domanda ha posto. – howettl

+0

Il genitore può utilizzare questi metodi per ottenere una richiamata e rispondere quando viene chiusa. Vedere questa risposta per l'uso: http: // StackOverflow.com/a/29518363/445348 – cottonBallPaws

1

Un modo per affrontare questo è quello di incorporare il tuo DialogFragment all'interno di un'attività e visualizzare l'attività di una finestra di dialogo, c'è una punta nel seguente link che spiega come:

http://developer.android.com/guide/topics/ui/dialogs.html

È possibile utilizzare questa per aggiornare il frammento sottostante perché quando la finestra di dialogo (che è un'attività) è terminata, onResume() verrà richiamato sul frammento sottostante. Aggiungi il codice per aggiornare lo stato del frammento nel metodo onResume() e questo è tutto quello che c'è.

+0

Penso che questo sia l'approccio migliore, ma che ne è dell'API 8+? Questo è stato aggiunto nell'API 11 – Iree

0

Ho appena risolto questo nel mio progetto. Quello che ho è un'attività con un ListFragment. In quel frammento di lista, quando si fa clic su un particolare elemento, visualizzo un DatePickerFragment (un DialogFragment personalizzato che visualizza un DatePickerDialog). Quando una data è selezionata, voglio che ListFragment sia rinfrescato.

per raggiungere questo obiettivo, l'attività che ospita la ListFragment (e ospita anche la DatePickerFragment, come un dato di fatto) ho implementato un metodo che sostituisce semplicemente il ListFragment con una nuova istanza, in questo modo:

public void criteriaChanged() 
{ 
    getFragmentManager().beginTransaction() 
      .replace(R.id.container, new FilterFragment()) 
      .commit(); 
} 

io chiamo questo metodo dal DatePickerFragment, da onDateSet():

FilterActivity fa = (FilterActivity) getActivity(); 
fa.criteriaChanged(); 

questo fa il trucco per me.

25

È possibile aggiungere un ascoltatore e ignorare l'onDismiss della vostra finestra frammento:

public class DismissDialog extends DialogFragment { 
    private DialogInterface.OnDismissListener onDismissListener; 

    public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) { 
     this.onDismissListener = onDismissListener; 
    } 

    @Override 
    public void onDismiss(DialogInterface dialog) { 
     super.onDismiss(dialog); 
     if (onDismissListener != null) { 
      onDismissListener.onDismiss(dialog); 
     } 
    } 
} 

Poi, il genitore, si imposta un ascoltatore:

DismissDialog d = new DismissDialog(); 
d.setOnDismissListener(new DialogInterface.OnDismissListener() { 
     @Override 
     public void onDismiss(DialogInterface dialog) { 

     } 
    }); 
d.show(getSupportFragmentManager(), "sometag"); 
+0

Questa è la risposta corretta – FireZenk

0

ho provato @Gazer risposta, non funziona per me, sto usando diversi frammenti di classe

import android.app.Fragment; 

Ma ho ottenuto questo funzionamento

  1. Creare una classe di interfaccia

    public interface MyDialogListener { 
        void OnCloseDialog(Object obj); //you can put any object here 
    } 
    
  2. Implementare la classe di interfaccia nel frammento Parent

    public class ActionBarFragment extends Fragment implements MyDialogListener{ 
    
        @Override 
        public void OnCloseDialog(Object obj) { 
         //Do you refresh 
        } 
    
  3. e poi aggiungo l'ascoltatore all'interno del DialogFragment

    public class SpecialDialogFragment extends DialogFragment { 
    
        MyDialogListener mListener; 
    
        public SpecialDialogFragment(MyDialogListener listener) { 
         this.mListener = listener; 
        } 
    
        @Override 
        public void onStop() { 
         super.onStop(); 
         if(mListener!=null) 
          mListener.OnCloseDialog(null); 
        } 
    
Problemi correlati