2012-03-24 14 views

Respuesta

4

Omitir onDismiss() de DialogFragment, o al crear el diálogo subyacente, establecer un oyente con setOnDimissListener().

+16

Esto informa al 'DialogFragment' que ha sido descartado, pero no es el fragmento principal, que es lo que hizo la pregunta. – howettl

+0

El padre puede usar estos métodos para obtener una devolución de llamada y responder cuando se descarta. Ver esta respuesta para el uso: http: // stackoverflow.com/a/29518363/445348 – cottonBallPaws

1

Una forma de lidiar con esto es, para incrustar el DialogFragment dentro de una actividad y mostrar la actividad como un diálogo, hay una punta en el siguiente enlace que explica cómo:

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

Se puede utilizar esta para actualizar el Fragmento subyacente porque cuando el Diálogo (que es una Actividad) finaliza, se invocará onResume() en el fragmento subyacente. Agregue código para actualizar el estado del fragmento en el método onResume() y eso es todo lo que hay.

+0

Creo que este es el mejor enfoque, pero ¿qué pasa con la API 8+? Esto fue agregado en API 11 – Iree

0

Acabo de resolver esto en mi proyecto. Lo que tengo es una actividad con un ListFragment. En ese fragmento de lista, cuando se hace clic en un elemento en particular, se muestra un DatePickerFragment (un DialogFragment personalizado que muestra un DatePickerDialog). Cuando se selecciona una fecha, quiero que se actualice el ListFragment.

Para lograr esto, en la actividad que acoge el ListFragment (y que también acoge la DatePickerFragment, como una cuestión de hecho) he implementado un método que simplemente reemplaza el ListFragment con una nueva instancia, así:

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

me llaman a este método desde el DatePickerFragment, desde onDateSet():

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

esto hace el truco para mí.

25

Puede añadir un detector y anular la onDismiss de su diálogo fragmento:

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

A continuación, en la matriz, se establece un oyente:

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

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

Esta es la respuesta correcta – FireZenk

0

Probé respuesta @Gazer, se no funciona para mí, estoy usando diferentes clases fragmento

import android.app.Fragment; 

Pero tengo este trabajo

  1. Crear una clase de interfaz

    public interface MyDialogListener { 
        void OnCloseDialog(Object obj); //you can put any object here 
    } 
    
  2. Implementar la clase de interfaz en el fragmento de Padres

    public class ActionBarFragment extends Fragment implements MyDialogListener{ 
    
        @Override 
        public void OnCloseDialog(Object obj) { 
         //Do you refresh 
        } 
    
  3. y luego añado el oyente dentro de la 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); 
        } 
    
Cuestiones relacionadas