Mejores Prácticas de Android – Comunicación entre Actividad y Fragmentos

Espero que ustedes puedan aclarar algo para mí.

He estado usando Android por cerca de 6 meses ahora y todavía estoy confundido sobre la mejor manera de comunicar entre la actividad y los fragmentos. Ya he leído la información en el sitio de desarrolladores de android .

Fragmento de la actividad

En este momento sé con 100% de certeza absoluta que una interfaz es la mejor manera de comunicarse desde el Fragmento a la Actividad. Es decir, crear una interfaz en tu Fragmento y dejar que tu Actividad la implemente. De esta manera puede llamar al método desde su interfaz dentro de su Fragmento y hacer que sea manejado por la Actividad (que implementa la interfaz).

Actividad a Fragmento

He aquí que no estoy seguro. El sitio de desarrolladores de android dice que para comunicarse con un fragmento tienes que poner tus objetos en un paquete.

Bundle bundle = new Bundle(); bundle.putInt(SOME_IDENTIFIER, myInt); 

Ahora he sido saben utilizar una clase Singleton de vez en cuando cuando tengo bastante alguna funcionalidad que puedo separar. Digamos que tengo un singleton llamado PersistenceService donde manejo todas las cosas relacionadas con la persistencia, por ejemplo, guardar algo en SharedPreferences . El PersistenceService mantendrá métodos como putMyString(String key, String myString) o putSomeObject(String key, SomeObject someObj) . De esta manera, una clase no tiene que manejar la persistencia en sí, sino que simplemente puede llamar al PersistenceService para hacerlo.

Ahora digo que tengo que actualizar algo en mi Fragmento, un TextView o algo así. Esto es lo que hago:

 String myString = PersistenceService.getInstance(getActivity()).getMyString(someKey); textView.setText(myString); 

Paso en un contexto ( getActivity() ) porque lo necesito para obtener las SharedPreferences .

Ahora mi pregunta real es:

¿Puedo recuperar mis datos en la actividad y pasarla al fragmento deseado a través de su paquete? ¿O simplemente hago referencia a mi derecho Singleton en mi Fragmento y acceder a los datos allí directamente.

No estoy atrapado ni nada, pero me gustaría saber lo que ustedes recomendarían. Cualquier consejo, observaciones, información, etc es muy apreciado.

Esta es una pregunta muy amplia, y como dice el libro pragmático de pensamiento y aprendizaje, la respuesta a la mayoría de las preguntas en el software es "¡Todo depende!".

Y realmente lo hace, realmente todo depende, no hay regla dura en el software, "siempre" y "nunca" son palabras muy poderosas que no deben usarse en software, por lo que, diciendo siempre ir para "Bundle" info o Never go para un Singleton es un poco estúpido específicamente en el software, así que, en lugar de decirle exactamente qué usar, pregúntese qué es lo que mejor encaja en sus necesidades teniendo en cuenta cosas como, escalabilidad, capacidad de gestión de extensibilidad, etc. Por ejemplo:

Si usted va para Bundle, le da cierta flexibilidad a su fragmento, usted está creando algún tipo de componente independiente listo para trabajar con cualquier información que proporcione, por otro lado, si usted sabe que necesita ese fragmento sólo en ese lugar, y la información que pasará es de alguna manera compleja (no se puede pasar con un paquete), ¿por qué complicar tanto? Simplemente vaya para el Singleton si hace el trabajo simple y limpio.

Espero que mi punto esté bien explicado aquí, no hay reglas duras de una manera u otra, ser tan diligente como sea posible y no ir de una u otra manera sólo por pereza o negligencia, en lugar de ser analista si vale la pena ir de una manera u otro basado en sus necesidades, y siempre tener en cuenta que no porque fuiste de esa manera esta vez será cierto para todos sus escenarios.

¡Espero eso ayude!

¡Saludos!

Yo uso bundle cuando quiero enviar datos de fragmento a fragmento (de un fragmento a la actividad por interfaz, de la actividad a un fragmento por paquete).

Si los datos se usan en todos los fragmentos singleton es la mejor manera, alguna vez uso también una istancia de datos objcet en actividad que manipulo en fragmento por métodos públicos de actividad pero no creo que sea la mejor práctica.

Por favor, entiendan que 2 fragmentos no pueden comunicarse directamente entre sí, Necesitarán ayuda de la actividad bajo el contexto del cual se crean. Usando una interfaz :). Implementar la interfaz en un fragmento

interfaz StartCommunication

Defina la interfaz en la actividad cuyo fragmento de contexto está utilizando

 public class MainActivity extends Activity implements SendFragment.StartCommunication 
  • Cómo lograr animaciones de transacciones de fragmentos suaves en Android
  • ¿Cómo afecta la profundidad de color y / o el nivel de compresión de las imágenes al rendimiento de la interfaz de usuario?
  • ¿Es mejor usar múltiples SpanObjects o múltiples TextViews en Android?
  • Problema "La prueba del repositorio tiene un error" al intentar importar el proyecto de bitbucket al android studio
  • Práctica recomendada para mantener los datos en la memoria y la base de datos al mismo tiempo en Android
  • ¿Robotium es confiable para probar cuán rápido comienzan las actividades y fragmentos?
  • ¿Importa en qué orden llamo finish () y startActivity ()?
  • La aplicación o la actividad lleva tiempo para cargarse algunas veces
  • Honeycomb Android emulador es perro lento - se manejará antes del lanzamiento oficial?
  • Android personalizado listview muy lento al desplazarse
  • Velocidad de inicio en startActivity
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.