Android: forma correcta de saltar entre fragmentos

Esta es una pregunta de diseño, en lugar de una técnica.

Caso general : Quiero que un evento de IU en un fragmento haga cambios en toda la actividad.

Caso específico : Tengo dos fragmentos, alojados en la misma actividad. Cuando el usuario hace clic en un botón de uno de esos fragmentos, quiero que sea reemplazado por el otro.

No quiero , sin embargo, mis Fragmentos tocar mi actividad. Tal vez quiera cambiar el comportamiento más tarde (tal vez, en una pantalla más grande, muestre ambos fragmentos en lugar de reemplazar el primero), y no quiero que mi código de fragmento tenga esa lógica.

Lo que hice fue implementar una clase Listener en mis fragmentos, que reporta los eventos de vuelta a la Activity . De esta manera, si quiero usar otra clase de Activity con un comportamiento de visualización diferente, sólo puedo cambiar el oyente y dejar el código Fragment sin tocar.

¿Es esta una buena manera de hacerlo? ¿Existe una buena práctica estándar o un mejor patrón de diseño?

Usar los oyentes es la forma recomendada de comunicarse entre Fragmento y su actividad.

Vea esta sección de documentación de Android para infromation. Larga historia corta que sólo implementar una interfaz de escucha por la clase de actividad y elenco getActivity () resultan en un fragmento de un oyente.

Desde mi experiencia personal esto es muy conveniente porque te permite:

  1. Easilly cambiar la actividad subyacente (por ejemplo, alojar fragmento entero en una actividad envoltura de compatibilidad en pre-3.0 y alojar este fragmento, junto con otros en 11 +)
  2. Fácilmente controla si la actividad del contenedor soporta callbacks o no. Sólo comprobar si es implementar el oyente y hacer sus acciones específicas de la aplicación si no lo hace.

Usted tiene razón sobre el uso de un Listener. Esto es algo que también tuve que tratar en un proyecto en el trabajo. La mejor manera de manejarlo es hacer que el Fragmento sea independiente en la naturaleza. Cualquier cosa que desee interactuar con el Fragmento debe usar su API pública y / o establecer oyentes para eventos específicos. Si está familiarizado con los patrones de diseño , este es el patrón de Observador . Los eventos pueden ser generales o específicos, así como contener datos o no datos.

Como ejemplo de mi proyecto, tuve dos Fragmentos. Un ListFragment y un InfoFragment que mostraron el ListItem seleccionado. El ListFragment ya tiene una interfaz de escucha para mi actividad para conectarse a, pero el InfoFragment no desde su su Fragmento básico. He añadido una interfaz de escucha al InfoFragment que sería notificado cuando el fragmento quería cerrar. Para el Fragmento, esto podría ser por una pulsación de botón, o una acción específica ocurrió, pero en lo que a mi Actividad se refiere, cuando se desencadena el Evento, cerraría la vista Fragmento.

No tengas miedo de usar muchos Oyentes para Fragmentos, sino también intentar agruparlos mediante una acción específica usando parámetros de datos para individualizarlos. ¡Espero que esto ayude!

Una respuesta técnica para:

Tengo dos fragmentos, alojados en la misma actividad. Cuando el usuario hace clic en un botón de uno de esos fragmentos, quiero que sea reemplazado por el otro.

  FragmentTransaction ft = this.getFragmentManager().beginTransaction(); Fragment mFragment = Fragment.instantiate(this.Activity(), Fragment2.class.getName()); ft.replace(android.R.id.content, mFragment); ft.commit(); 
 public class Example_3_Mainfile extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.example_3_mainfile); Fragment fr ;//make class that extend to thefragment fr = new Act_2_1(); FragmentManager fm = getFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.fragment_place, fr); //id get of fragment tag from xml file there decelar fragmentTransaction.commit(); } } 
  • ¿Cómo implementar un singleton configurable?
  • ¿Cuál es el papel de la clase Activity en MVC?
  • ¿Cuáles son los patrones de diseño utilizados en android?
  • ¿Cómo cambiar el comportamiento del método mediante la reflexión?
  • Menú contextual similar a la nueva aplicación Play Music (v5.0.0)
  • Agregando métodos a la clase Exist en android
  • Android - index para ListView?
  • Android: Actividad individual, vistas múltiples
  • Patrón de diseño para un servicio como la arquitectura
  • Un patrón de diseño para evitar múltiples ifs
  • Implementación de MVP de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.