Hay una forma mucho más simple de recibir un resultado de un DialogFragment.
Primero, en su Actividad, Fragmento o Fragmento de Actividad, necesita agregar la siguiente información:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Stuff to do, dependent on requestCode and resultCode
if(requestCode == 1) { // 1 is an arbitrary number, can be any int
// This is the return result of your DialogFragment
if(resultCode == 1) { // 1 is an arbitrary number, can be any int
// Now do what you need to do after the dialog dismisses.
}
}
}
El requestCode
es básicamente la etiqueta int para el DialogFragment que llama, voy a mostrar cómo funciona esto en un segundo. ResultCode es el código que envía de regreso desde el DialogFragment que le dice a su Actividad, Fragmento o FragmentoActividad actual en espera lo que sucedió.
El siguiente fragmento de código que debe ingresar es la llamada al DialogFragment. Un ejemplo está aquí:
DialogFragment dialogFrag = new MyDialogFragment();
// This is the requestCode that you are sending.
dialogFrag.setTargetFragment(this, 1);
// This is the tag, "dialog" being sent.
dialogFrag.show(getFragmentManager(), "dialog");
Con estas tres líneas está declarando su DialogFragment, configurando un requestCode (que llamará a onActivityResult (...) una vez que se descarta el Diálogo, y luego está mostrando el diálogo. Es así de simple.
Ahora, en su DialogFragment solo necesita agregar una línea directamente antes de la dismiss()
para que pueda enviar un resultCode de nuevo a onActivityResult ().
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
Eso es. Tenga en cuenta que el resultCode se define como el int resultCode
que he establecido resultCode = 1;
en este caso.
Eso es todo, ahora puede enviar el resultado de su DialogFragment a su Actividad de llamada, Fragmento o FragmentActivity.
Además, parece que esta información se publicó anteriormente, pero no hubo un ejemplo suficiente dado, así que pensé en proporcionar más detalles.
EDITAR 06.24.2016
Pido disculpas por el código engañoso anterior. Pero ciertamente no puede recibir el resultado de vuelta a la actividad como la línea:
dialogFrag.setTargetFragment(this, 1);
establece un objetivo Fragment
y no Activity
. Entonces, para hacer esto, debe usar Implementar un InterfaceCommunicator
.
En su DialogFragment
conjunto una variable global
public InterfaceCommunicator interfaceCommunicator;
Crear una función pública para manejarlo
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
Luego, cuando esté listo para enviar el código de nuevo Activity
cuando DialogFragment
termine de ejecutarse, simplemente agregue la línea antes de dismiss();
su DialogFragment
:
interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
En su actividad ahora tiene que hacer dos cosas, la primera es eliminar esa línea de código que ya no es aplicable:
dialogFrag.setTargetFragment(this, 1);
Luego implemente la interfaz y ya está. Puede hacerlo agregando la siguiente línea a la implements
cláusula en la parte superior de su clase:
public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
Y luego @Override
la función en la actividad,
@Override
public void sendRequestCode(int code) {
// your code here
}
Utiliza este método de interfaz como lo haría con el onActivityResult()
método. Excepto que el método de interfaz es para DialogFragments
y el otro es para Fragments
.