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:
- 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.
- Implementar esta interfaz en la actividad principal.
- Inicie dialogFragment en listFragment onItem haga clic en.
- Guardar la selección del usuario en la actividad.
- 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?
- ¿También se restaura la fragata de Fragmentos cuando la actividad se vuelve a crear después de que se haya matado el proceso?
- SurfaceView UpdateWindow () - NullpointerException
- Conexión / autenticación de Twitter en Android Fragment
- Cómo pasar el resultado del segundo fragmento al primer fragmento
- Android Pull-to-Refresh con Fragmento ListView y Adaptador ListView personalizado
- ¿Cómo dejar que sólo fragmentos específicos desplazarse dentro de un ViewPager de CoordinatorLayout?
- Parte del fragmento dentro de ViewPager se corta en la parte inferior de la pantalla (Android)
- ¿Es la mejor práctica para la navegación con pestañas?
- Añadir un fragmento a un diálogo
- ¿Cómo puedo conservar el estado de un elemento giratorio / desplegable seleccionado en el cambio de orientación?
- Mostrando bloques de DialogFragments ICS
- Ejemplos de Fragmentos de Android
- fragmentar dinámico fragmento android
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.