Sé que Activities
están diseñados para representar una sola pantalla de mi aplicación, mientras que Fragments
están diseñados para ser diseños de interfaz de usuario reutilizables con lógica incrustada dentro de ellos.
Hasta no hace mucho, desarrollé una aplicación que decía que debían desarrollarse. Creé un Activity
para representar una pantalla de mi aplicación y usé Fragmentos para ViewPager
o Google Maps
. Rara vez he creado una ListFragment
interfaz de usuario u otra que pueda reutilizarse varias veces.
Recientemente me encontré con un proyecto que contiene solo 2, Activities
uno es ay SettingsActivity
otro es MainActivity
. El diseño de MainActivity
está lleno de muchos fragmentos de IU de pantalla completa ocultos y solo se muestra uno. En la Activity
lógica hay muchos FragmentTransitions
entre las distintas pantallas de la aplicación.
Lo que me gusta de este enfoque es que debido a que la aplicación usa un ActionBar
, permanece intacto y no se mueve con la animación de cambio de pantalla, que es lo que sucede con el Activity
cambio. Esto le da una sensación más fluida a esas transiciones de pantalla.
Así que supongo que lo que estoy pidiendo es que comparta su forma de desarrollo actual con respecto a este tema, sé que puede parecer una pregunta basada en opiniones a primera vista, pero la veo como una pregunta de diseño y arquitectura de Android ... uno basado en la opinión.
ACTUALIZACIÓN (01.05.2014): Después de esta presentación de Eric Burke de Square , (que debo decir que es una gran presentación con muchas herramientas útiles para desarrolladores de Android. Y no estoy relacionado de ninguna manera con Square)
http://www.infoq.com/presentations/Android-Design/
De mi experiencia personal durante los últimos meses, descubrí que la mejor manera de construir mis aplicaciones es crear grupos de fragmentos que lleguen a representar un flujo en la aplicación y presenten todos esos fragmentos en uno Activity
. Entonces, básicamente, tendrá el mismo número de Activities
en su aplicación que el número de flujos. De esa manera, la barra de acción permanece intacta en todas las pantallas del flujo, pero se recrea al cambiar un flujo, lo que tiene mucho sentido. Como afirma Eric Burke y como también me he dado cuenta, la filosofía de utilizar la menor cantidad Activities
posible no es aplicable a todas las situaciones porque crea un lío en lo que él llama la actividad de "Dios".
Los expertos le dirán: "Cuando vea la interfaz de usuario, sabré si usar una Activity
o una Fragment
". Al principio, esto no tendrá ningún sentido, pero con el tiempo podrás saber si lo necesitas Fragment
o no.
Hay una buena práctica que me resultó muy útil. Se me ocurrió mientras intentaba explicarle algo a mi hija.
Es decir, imagine un cuadro que representa una pantalla. ¿Puedes cargar otra pantalla en este cuadro? Si usa una caja nueva, ¿tendrá que copiar varios elementos de la primera caja? Si la respuesta es Sí, entonces debe usar Fragments
, porque la raíz Activity
puede contener todos los elementos duplicados para ahorrarle tiempo al crearlos, y simplemente puede reemplazar partes de la caja.
Pero no olvide que siempre necesita una caja contenedor ( Activity
) o sus piezas se dispersarán. Entonces una caja con partes adentro.
Tenga cuidado de no hacer un mal uso de la caja. Los expertos de Android UX aconsejan (puede encontrarlos en YouTube) cuando deberíamos cargar explícitamente otro Activity
, en lugar de usar un Fragment
(como cuando tratamos con el Cajón de navegación que tiene categorías). Una vez que se sienta cómodo con Fragments
, puede ver todos sus videos. Más aún son material obligatorio.
¿Puedes ahora mirar tu interfaz de usuario y averiguar si necesitas una Activity
o una Fragment
? ¿Obtuviste una nueva perspectiva? Creo que lo hiciste.
Mi filosofía es esta:
Cree una actividad solo si es absolutamente necesario. Con la pila de actividades disponible para realizar un montón de transacciones de fragmentos, trato de crear la menor cantidad posible de actividades en mi aplicación. Además, comunicarse entre varios fragmentos es mucho más fácil que enviar datos entre actividades.
Las transiciones de actividad son caras, ¿verdad? Al menos eso creo, ya que la actividad anterior debe ser destruida / pausada / detenida, empujada a la pila, y luego la nueva actividad debe ser creada / iniciada / reanudada.
Es solo mi filosofía desde que se introdujeron los fragmentos.
Bueno, de acuerdo con las conferencias de Google (tal vez aquí , no recuerdo), debería considerar usar Fragments siempre que sea posible, ya que hace que su código sea más fácil de mantener y controlar.
Sin embargo, creo que en algunos casos puede volverse demasiado complejo, ya que la actividad que aloja los fragmentos necesita navegar / comunicarse entre ellos.
Creo que deberías decidir por ti mismo qué es lo mejor para ti. Por lo general, no es tan difícil convertir una actividad en un fragmento y viceversa.
He creado una publicación sobre este dillema ¿Por qué fragmentos y cuándo utilizar fragmentos en lugar de actividades? , si desea leer más.
Desde Jetpack , la aplicación de actividad única es la arquitectura preferida. Útil especialmente con el componente de arquitectura de navegación .
Por qué prefiero Fragmento sobre Actividad en TODOS LOS CASOS.
La actividad es cara. En Fragmento, las vistas y los estados de propiedad están separados; siempre que un fragmento esté dentro backstack
, sus vistas se destruirán. Por lo que puede apilar muchos más fragmentos que actividad.
Backstack
manipulación. Con FragmentManager
, es fácil borrar todos los Fragmentos, insertar más que en Fragmentos y etcs. Pero para Activity, será una pesadilla manipular esas cosas.
Un ciclo de vida mucho más predecible . Siempre que la actividad del host no se recicle. los Fragmentos del backstack no se reciclarán. Por lo tanto, es posible usarlo FragmentManager::getFragments()
para encontrar un fragmento específico (no se recomienda).
En mi opinión, no es realmente relevante. El factor clave a considerar es
El uso principal de fragmentos es crear actividades multipane, lo que lo hace perfecto para aplicaciones de respuesta de tableta / teléfono.
¡No olvide que una actividad es el bloque / componente de la aplicación que se puede compartir e iniciar a través de Intent! Por lo tanto, cada actividad de su aplicación debe resolver solo un tipo de tarea. Si solo tiene una tarea en su aplicación, creo que solo necesita una actividad y muchos fragmentos si es necesario. Por supuesto, puede reutilizar fragmentos en actividades futuras que resuelvan otras tareas. Este enfoque será una separación clara y lógica de tareas. Y no es necesario mantener una actividad con diferentes parámetros de filtro de intención para diferentes conjuntos de fragmentos. Defina tareas en la etapa de diseño del proceso de desarrollo según los requisitos.
Hay más en esto de lo que te imaginas, debes recordar que una actividad que se inicia no destruye implícitamente la actividad de llamada. Claro, puede configurarlo de manera que su usuario haga clic en un botón para ir a una página, inicie la actividad de esa página y destruya la actual. Esto causa mucha sobrecarga. La mejor guía que puedo darte es:
** Inicie una nueva actividad solo si tiene sentido tener la actividad principal y esta abierta al mismo tiempo (piense en varias ventanas).
Un gran ejemplo de cuándo tiene sentido tener varias actividades es Google Drive. La actividad principal proporciona un explorador de archivos. Cuando se abre un archivo, se inicia una nueva actividad para ver ese archivo. Puede presionar el botón de aplicaciones recientes que le permitirá volver al navegador sin cerrar el documento abierto, y quizás incluso abrir otro documento en paralelo al primero.
Lo que hice: usar menos fragmentos cuando sea posible. Desafortunadamente, es posible en casi todos los casos. Entonces, termino con muchos fragmentos y un poco de actividades. Algunos inconvenientes me he dado cuenta:
ActionBar
& Menú: cuando 2 fragmentos tienen un título, menú diferente, backstack
no hay forma de restaurar el título anterior. Es posible que necesite una barra de herramientas en cada fragmento para este caso, pero créanme, eso les llevará más tiempo. startForResult
, la actividad tiene pero el fragmento no.Mi solución para esto es usar una actividad para envolver un fragmento dentro. Así que tenemos barra de acción, menú startActivityForResult
, animación, ...
La gran ventaja de una fragment
sobreactividad es que el código que se usa para el fragmento se puede usar para diferentes actividades. Por lo tanto, proporciona reutilización de código en el desarrollo de aplicaciones.
use una actividad por aplicación para proporcionar una base para fragment
usar fragment
en la pantalla,
fragments
tienen un peso ligero en comparación con los activites
fragmentos son
fragmentos reutilizables son más adecuados para aplicaciones que admiten teléfonos y tabletas
Eres libre de usar uno de esos.
Básicamente, debes evaluar cuál es la mejor para tu aplicación. Piense en cómo administrará el flujo de negocios y cómo almacenar / administrar las preferencias de datos.
Piense en cómo los fragmentos almacenan los datos basura. Cuando implementa el fragmento, tiene una raíz de actividad para llenar con fragmento (s). Entonces, si está tratando de implementar muchas actividades con demasiados fragmentos, debe considerar el rendimiento en su aplicación, porque está manipulando (habla groseramente) dos ciclos de vida de contexto, recuerde la complejidad.
Recuerde: ¿debo usar fragmentos? ¿Por qué no debería?
Saludos.
Utilizo Fragmentos para una mejor experiencia de usuario. Por ejemplo, si tiene un botón y desea ejecutar, digamos un servicio web cuando hace clic en él, adjunto un fragmento a la actividad principal.
if (id == R.id.forecast) {
ForecastFragment forecastFragment = new ForecastFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.main_content, forecastFragment);
ft.addToBackStack("backstack");
forecastFragment.setArguments(b);
ft.commit();
}
De esa forma el usuario no tendrá que moverse en otra actividad.
Y, en segundo lugar, prefiero los fragmentos porque puedes manejarlos fácilmente durante la rotación.
Depende de lo que quieras construir realmente. Por ejemplo, los navigation drawer
usos fragmentos. Las pestañas también se utilizan fragments
. Otra buena implementación es donde tienes un listview
. Cuando gira el teléfono y hace clic en una fila, la actividad se muestra en la mitad restante de la pantalla. Personalmente, utilizo fragments
y fragment dialogs
, ya que es más profesional. Además, se manejan más fácilmente en rotación.
La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.
Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.
Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.
Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.
Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?
Anteriormente, Kotaku informó que un hotel Godzilla se estaba abriendo en Tokio este abril. Junto al hotel, estaba programada la aparición de una enorme cabeza de 'Zilla, pero todo lo que hemos visto fueron imágenes conceptuales computarizadas.
Foto: Getty Desde que lanzó The Boring Company hace un año, Elon Musk ha mencionado varios sitios de construcción posibles para el negocio de perforación de túneles y ha descartado una vaga referencia a una aprobación gubernamental "verbal" para un túnel Hyperloop que conecta la ciudad de Nueva York y Washington. , CC. Pero ahora sabemos que al menos un alcalde quiere que Musk perfore un agujero debajo de su ciudad.
Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.
Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.
El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.
Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon
El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.
El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".
Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.
Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.