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:
- ¿Hay una diferencia entre getContext de Fragment y getContext del contenedor pasado a onCreateView of Fragment?
- Actividad, AppCompatActivity, FragmentActivity y ActionBarActivity: ¿Cuándo utilizar qué?
- Cómo evitar onCreateView () al deslizar en las pestañas
- Margen de diseño / relleno en la parte superior del fragmento de diálogo
- Cómo agregar un fragmento dentro de un ViewPager usando Nested Fragment (Android 4.2)
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();
- Android Espresso: ¿Cómo puedo probar un Fragmento específico al seguir una actividad a varios fragmentos de arquitectura
- FragmentStatePagerAdapter no quita fragmentos si se eliminó el fragmento padre
- ¿Cómo puedo guardar la pila trasera de la aplicación en un lote?
- ¿Cómo utilizo las preferencias compartidas en un fragmento de Android?
- ¿Es Fragmento una actividad? (Androide)
- La aplicación se bloquea en rotación sin stackTrace
- Android: ¿Qué tiene de malo mi animación de la transición de fragmentos?
- ViewPager setCurrentItem Slide
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:
- Su
Fragment
puede comprobar fácilmente si laActivity
padres implementa esta interfaz, por lo queFragment
será capaz de comunicar sus necesidades, - 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,
- 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.
- Configuración de Theme.Holo.Light cambia todo, excepto las casillas de verificación en la lista
- Ver la ruta del archivo en un gestor de archivos según la intención de Android