Comunicación Fragmento-Actividad y comunicación entre fragmentos

Una pregunta para el diseño sobre la comunicación entre fragmentos,

¿Por qué alguien usaría un patrón de devolución de llamada un poco complicado implementando oyentes, en lugar de usar métodos estáticos simples de una clase a la que queremos llamar un método (algo similar a usar Singleton para algunos métodos / atributos). ¿Hay algún problema de rendimiento o es "sólo" una mala práctica de programación de OO para Android / Java? Así que la manera más fácil para la comunicación bidireccional podría ser:

MyActivity activity Fragment A Fragment B static method canBeCalledFromAnywhere() {} method activityMethod() call FragmentA.doSomething(); call FragmentB.doSomething(); FragmentA onCreate() onMe = this; static method doSomething() do something with static or use onMe for instance; method oneMethodFragmentA() call MyActivity.canBeCalledFromAnywhere(); FragmentB onCreate() onMe = this; static method doSomething() do something with static or use onMe for instance; method oneMethodFragmentB() call MyActivity.canBeCalledFromAnywhere(); 

Es mejor usar la interfaz de comunicación claramente especificada que hacer asumir que hay uno. Por lo tanto si define interface para su comunicación entonces:

  1. Su Fragment puede comprobar fácilmente si la Activity padres implementa esta interfaz, por lo que Fragment será capaz de comunicar sus necesidades,
  2. Para definir la interfaz que necesita para pensar en un poco en lugar de sólo iniciar la codificación, lo que conduce a algún tipo de normalización y esto es bueno,
  3. Es fácil mantener las actualizaciones de la interfaz como el compilador se quejará si cambia la interfaz, pero no la implementación.

También puede leer este artículo de Android SDK .

Si tiene un escenario de uso simple para el fragmento / actividad, entonces su solución es viable. No siempre compran lo que dicen los puristas java – si todos lo hicimos, nadie haría nada. A veces es mejor lanzar la convención por la ventana y hacer lo que es más rápido y más fácil de hacer, especialmente si se trata de una aplicación pequeña y alguien te está pagando para hacerlo.

La razón para usar los callbacks documentados y los patrones recomendados es que trabajará con el framework de Android en lugar de hacerlo en contra. El uso de métodos estáticos elimina completamente este aspecto y parece sencillo, pero hay problemas en dos niveles.

En primer lugar, desde una perspectiva de diseño orientado a objetos está estrechamente uniendo clases que tienen responsabilidades muy diferentes e independientes, haciéndolas más difíciles de reutilizar y refactorizar. Los métodos más estáticos que introduces en tu fragmento y clases de actividad, peor será este problema.

En segundo lugar, usted está trabajando fuera del ciclo de vida para ambos tipos de objetos y esto va a causar mucho dolor. Primero, los fragmentos se destruyen y vuelven a crear por Android todo el tiempo. Por ejemplo, cuando gira el dispositivo y la pantalla cambia del modo vertical al modo horizontal, todos sus fragmentos se destruyen y se crean de nuevo, ya que en el paisaje puede estar utilizando fragmentos diferentes o renderizar diferentes contenidos en los mismos fragmentos. Fragmentos y actividades también se pueden pausar cuando el usuario navega a una nueva actividad o aplicación diferente.

Crear métodos estáticos en fragmentos y actividades y puede invocar esos métodos en cualquier momento y no tiene idea si el fragmento o la actividad es incluso visible cuando lo hace. No sabes en qué etapa de su ciclo de vida es si es parte de la actividad actual y por lo tanto vas a escribir un montón de código adicional para hacer frente a esto, o escribir nada en absoluto (y tener un muy Aplicación de buggy).

El uso de las devoluciones de llamada también significa que en una actividad con múltiples fragmentos puede asegurarse más fácilmente que los fragmentos alternativos puedan utilizarse para diseños alternativos y la actividad principal, al decidir qué fragmento utilizar, puede asegurar que los datos de fragmentos hermanos se encaminen al fragmento correcto .

Descargue las últimas herramientas de Android (SDK r20, herramientas r14 a partir de este momento) y cree un nuevo proyecto de aplicación Android ( New > Other > Android Application Project ) utilizando el Eclipse IDE. En el paso "Crear actividad", seleccione un proyecto base MasterDetailFlow . Esto instanciará una aplicación con dos Fragmentos (un ListFragment y una vista de detalle) que funciona justo fuera de la caja, antes de escribir una línea de código. Puede examinar cómo se comunican a través de la Actividad principal.

  • ¿Por qué mi inicio de sesión de facebook android sdk se llama dos veces?
  • Error en Spinner en una ventana emergente, se bloquea cuando se hace clic
  • Anular el oyente en Fragment onDetach ()?
  • ¿Los fragmentos causan actividad grasa?
  • ¿Cómo implementar un gesto de deslizamiento entre fragmentos?
  • Cambiar la fuente PreferenceFragment a través de fuentes de activos
  • Obtener Fragmento por etiqueta
  • Onbackpressed en el fragmento no funciona mientras se implementa la interfaz
  • Señal fatal 11 (SIGSEGV) código = 2 en genymotion emulador no utilizando NDK
  • Barra de herramientas Android Agregar elementos de menú para diferentes fragmentos
  • ¿Cómo puedo habilitar las pestañas de la barra de acciones en un fragmento?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.