2012-03-24 16 views

Antwort

4

Überschreiben Sie onDismiss() von DialogFragment oder legen Sie beim Erstellen des zugrunde liegenden Dialogfelds einen Listener mit setOnDimissListener() fest.

+16

Dies informiert das 'DialogFragment', dass es abgewiesen wurde, aber nicht sein Elternfragment, was die Frage war. – howettl

+0

Das übergeordnete Element kann diese Methoden verwenden, um einen Rückruf zu erhalten und zu antworten, wenn es abgewiesen wird. Siehe diese Antwort für die Verwendung: http: // stackoverflow.com/a/29518363/445348 – cottonBallPaws

1

Eine Möglichkeit, dies zu umgehen ist Ihr DialogFragment innerhalb einer Aktivität einzubetten und die Aktivität als Dialog angezeigt werden, gibt es eine Spitze in den folgenden Link, der erklärt, wie:

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

Sie diese verwenden können um das zugrunde liegende Fragment zu aktualisieren, da onResume() für das zugrunde liegende Fragment aufgerufen wird, wenn der Dialog (der eine Aktivität ist) beendet wird. Fügen Sie Code hinzu, um den Status des Fragments in der onResume() -Methode zu aktualisieren, und das ist alles, was es auch gibt.

+0

Ich denke, das ist der beste Ansatz, aber was ist mit API 8+? Dies wurde in API 11 hinzugefügt. – Iree

0

Ich habe das gerade in meinem Projekt gelöst. Was ich habe, ist eine Aktivität mit einem ListFragment. Wenn in diesem Listenfragment auf ein bestimmtes Element geklickt wird, zeige ich ein DatePickerFragment (ein benutzerdefiniertes DialogFragment, das einen DatePickerDialog anzeigt) an. Wenn ein Datum ausgewählt ist, möchte ich, dass das ListFragment aktualisiert wird.

Um dies zu erreichen, in der Aktivität, die die ListFragment Gastgeber (und es beherbergt auch das DatePickerFragment, wie in der Tat) ich eine Methode implementiert, die einfach die ListFragment mit einer neuen Instanz ersetzt, etwa so:

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

ich nenne diese Methode aus dem DatePickerFragment, von onDateSet():

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

Dieser den Trick für mich.

25

Sie können einen Listener hinzufügen und das onDismiss Ihrer Fragment Dialog außer Kraft setzen:

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

Dann wird auf der Eltern richten Sie einen Hörer:

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

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

Dies ist die richtige Antwort – FireZenk

0

versuchte ich @Gazer Antwort, es nicht für mich arbeiten, ich bin mit verschiedenem Fragmente Klasse

import android.app.Fragment; 

Aber ich habe diese Arbeit

  1. Eine Interface-Klasse

    public interface MyDialogListener { 
        void OnCloseDialog(Object obj); //you can put any object here 
    } 
    
  2. Implementieren Sie die Interface-Klasse in dem Elternfragment

    public class ActionBarFragment extends Fragment implements MyDialogListener{ 
    
        @Override 
        public void OnCloseDialog(Object obj) { 
         //Do you refresh 
        } 
    
  3. und dann füge ich den Hörer in den 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); 
        } 
    
Verwandte Themen