Cómo obtener clics de botón en fragmento de host del fragmento de diálogo

Tengo un listFragment, donde quiero exhibir un DialogFragment (sí / no) en listItemClick. Quiero recuperar la selección del usuario (Sí / No) en listFragment. He leído sobre el mecanismo de la interfaz del oyente pero ese trabajo con el fragmento de la actividad <->. Una forma de hacerlo puede ser:

  1. Defina la interfaz en el fragmento de diálogo que contenga funciones de selección de botones yes / no y llame a estos métodos en los clics de botón positivo / negativo del cuadro de diálogo de alerta.
  2. Implementar esta interfaz en la actividad principal.
  3. Inicie dialogFragment en listFragment onItem haga clic en.
  4. Guardar la selección del usuario en la actividad.
  5. Obtener esta opción en listFragment por otra interfaz, implementada en la actividad principal.

¿Pero tenemos algún mecanismo simple para esta tarea simple? Cualquier ejemplo o código?

Hay otra forma de obtener el resultado de DialogFragment.

Puede utilizar Fragment.setTargetFragment () . Al crear una instancia de su DialogFragment establecer el fragmento de destino a la misma. A continuación, en DialogFragment puede obtener este fragmento de Fragment.getTargetFragment () .

Por ejemplo, puede hacerlo así:

public interface DialogClickListener { public void onYesClick(); public void onNoClick(); } 
 public class MyListFragment extends ListFragment implements DialogClickListener { ... private void showDialog() { DialogFragment dialog = new MyDialogFragment(); dialog.setTargetFragment(this, 0); dialog.show(getFragmentManager(), "dialog"); } @Override public void onYesClick() { // do something } @Override public void onNoClick() { // do something } } 
 public class MyDialogFragment extends DialogFragment { private DialogClickListener callback; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { callback = (DialogClickListener) getTargetFragment(); } catch (ClassCastException e) { throw new ClassCastException("Calling fragment must implement DialogClickListener interface"); } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage("message") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { callback.onYesClick(); } }).setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { callback.onNoClick(); } }); return builder.create(); } } 

También puede utilizar un bus de eventos para facilitar la comunicación entre los componentes. Otto es una gran biblioteca para usar disponible aquí -> https://github.com/square/otto . Está hecho por los chicos Square para que sepas que es un proyecto de código abierto de calidad.

Tienen una muestra en el repositorio que le muestra lo fácil que es usar.

  • MapView (mapas de android api v2) dentro de la distribución de fragmentos no muestra
  • Determine el estado vacío del fragmento backstack en android
  • FragmentPagerAdapter dentro de Fragment
  • Excepción de tiempo de ejecución al utilizar la configuración de Android (estoy siguiendo el curso de desarrollo de Android de udacity)
  • Android FragmentTransaction setTransitionStyle
  • Inflando AppBarLayout con la barra de herramientas + TabLayout
  • ¿Cómo puedo fragmento pop de backstack sin reanudarlo?
  • El fragmento de niño desencadena onClick del padre
  • Fragmento Actividad - la aplicación se ha muerto, no se ha guardado ningún estado
  • Integre tabhost y el cajón de navegación
  • FragmentTransaction.replace reemplaza sólo el primer Fragment en un contenedor
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.