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 reutilizable diseños de interfaz de usuario con la lógica incrustado en el interior de ellos.

Hasta no hace mucho tiempo, he desarrollado una aplicación como se dice que deben ser desarrollados.
He creado un Activity para representar una pantalla de mi aplicación y se utiliza Fragmentos de ViewPager o Google Maps. Yo rara vez creado un ListFragment u otra interfaz de usuario que puede ser reutilizado varias veces.

Recientemente me topé con un proyecto que contiene sólo 2 Activities uno es un SettingsActivity y otro es el MainActivity. El diseño de la MainActivity se rellena con muchos oculto pantalla completa interfaz de usuario de fragmentos y sólo se muestra. En el Activity lógica hay muchos FragmentTransitions entre las diferentes pantallas de la aplicación.

Lo que me gustó de este enfoque es que debido a que la aplicación utiliza un ActionBar, se mantiene intacta y no se mueve con la animación de cambio de pantalla, que es lo que ocurre con Activity de conmutación. Esto para dar una mayor fluidez a sentir esas transiciones de pantalla.

Así que supongo que lo que estoy pidiendo es compartir su actual desarrollo de la forma con respecto a este tema, sé que puede parecer una opinión basada pregunta, a primera vista, pero yo lo veo como un Android de diseño y arquitectura pregunta… No es realmente una opinión basada uno.

ACTUALIZACIÓN (01.05.2014): Tras esta presentación por Eric Burke de Plaza, (que he de decir es una gran presentación con un montón de herramientas útiles para los desarrolladores de android. Y yo no soy relacionado de alguna manera a la Plaza)

http://www.infoq.com/presentations/Android-Design/

A partir de mi experiencia personal durante los últimos meses, he encontrado que la mejor manera de construir mis aplicaciones es la creación de grupos de fragmentos que llegan a representar una flujo en la aplicación y presentar todos los fragmentos en un Activity. Así que, básicamente, usted va a tener el mismo número de Activities en su aplicación, el número de flujos.
De esa manera la barra de acción se mantiene intacta en todo el flujo de pantallas, sino que se recrea en el cambio de un flujo que hace un montón de sentido. Como Eric Burke unidos, y como he llegado a darme cuenta así, la filosofía de utilizar como pocos Activities como sea posible, no es aplicable para todos los casos porque se crea un desorden en lo que él llama el «Dios» de la actividad.

InformationsquelleAutor Emil Adz | 2013-11-30

14 Comentarios

  1. 256

    Expertos le dirá: «Cuando yo vea la interfaz de usuario, voy a saber si el uso de un Activity o un Fragment«. En un principio esto no tendrá ningún sentido, pero con el tiempo, usted realmente va a ser capaz de decirle si usted necesita Fragment o no.

    No es una buena práctica que he encontrado muy útil para mí. Se me ocurrió mientras yo estaba tratando de explicar algo a mi hija.

    Es decir, imaginar un cuadro que representa a una pantalla. Se puede cargar otra pantalla en este cuadro? Si utiliza una caja nueva, tendrá que copiar varios elementos de la 1ª caja? Si la respuesta es Sí, entonces usted debe utilizar Fragments, debido a que la raíz Activity puede contener todos los elementos duplicados para ahorrar tiempo en la creación de ellos, y usted puede simplemente reemplazar las partes de la caja.

    Pero no olvides que siempre se necesita un contenedor de caja (Activity) o sus partes serán dispersados. Así que una caja con las piezas en el interior.

    Tener cuidado de no hacer un uso indebido del cuadro. Android UX expertos aconsejan (los puedes encontrar en YouTube), cuando deberíamos cargar explícitamente otra Activity, en lugar de utilizar un Fragment (como cuando nos ocupamos de la Navegación de Cajón que ha categorías). Una vez que usted se sienta cómodo con Fragments, usted puede ver todos sus videos. Incluso más que son obligatorios material.

    Puede ahora mirar a su interfaz de usuario y averiguar si usted necesita un Activity o un Fragment? Sacaste una nueva perspectiva? Creo que hiciste.

    • ¿tienes un enlace a youtube de la alimentación que usted menciona? Yo de la búsqueda para «Android UX expertos» y «Android UX», pero no estoy del todo seguro de que los vídeos que estamos hablando.
    • No más, la vi hace más de un año. Búsqueda para el desarrollador de Android oficial hablando de UX
    • Un ejemplo de consideración: la actividad ha parentActivity así que podemos sintetizar backstack, mientras que la introducción de la notificación, pero yo no creo que haya tal parentFragment.
    • hay getParentFragment: developer.android.com/reference/android/support/v4/app/…
    • sí, es getParentFragment, pero no es a lo que me refería dude, consulte developer.android.com/guide/topics/manifest/…
  2. 120

    Mi filosofía es esta:

    Crear una actividad sólo si es absolutamente necesario absolutamente. Con la parte posterior de la pila disponible para cometer un montón de fragmentos de las transacciones, trato de crear algunas actividades en mi app como sea posible. También, la comunicación entre los diversos fragmentos es mucho más fácil que el envío de datos de ida y vuelta entre las actividades.

    Actividad transiciones son caros, ¿verdad? Al menos yo lo creo así, ya que el viejo de la actividad tiene que ser destruido/pausa/parada, se inserta en la pila y, a continuación, la nueva actividad tiene que ser creado/inicio/reanudar.

    Es sólo mi filosofía desde los fragmentos fueron introducidas.

    • cierto, pero como has escrito, a veces es necesario para utilizar las actividades. un ejemplo es la pantalla de la cámara, donde es mejor usarlo en el modo horizontal. otro ejemplo es la configuración de la pantalla que se muestra al poner una personalizada appWidget (en el «escritorio»- el lanzador de la aplicación).
    • Gracias por responder y compartir la experiencia Así que creo que es una buena práctica en android para limitar la aplicación a una Actividad y el uso de fragmentos por toda la pantalla si la arquitectura de la aplicación lo permite?
    • Sí. Yo así lo creo. Limitar su aplicación para usar como mínimo actividades como sea posible – arquitecto de tal manera, si es posible.
    • Entonces, ¿cómo se resuelve el problema de que los fragmentos que necesitan para pasar el uno al otro «estado»? Todo el estado, a través de todas sus fragmentos necesidad de vivir en la actividad, de lo contrario, usted está obligado a usar un singleton.
    • No estoy convencido de que la comunicación entre los diversos fragmentos es mucho más fácil en lugar de enviar los datos de ida y vuelta entre las actividades.
    • Al menos, onActivityResult() es más seguro y más fácil de fragmentos de’ devoluciones de llamada.

  3. 57

    Bien, de acuerdo a Google conferencias (tal vez aquí, no recuerdo) , usted debe considerar el uso de Fragmentos de siempre que es posible, como hace el código más fácil de mantener y de control.

    Sin embargo, creo que en algunos casos puede llegar a ser muy complejas, como la actividad que aloja los fragmentos de la necesidad de navegar/comunicarse entre ellos.

    Creo que se debe decidir por sí mismo lo que es mejor para usted. Por lo general no es difícil convertir una actividad a un fragmento y viceversa.

    He creado un post sobre este dilema aquí, si quieres leer algo más.

    • Gracias por responder y compartir la experiencia Así que creo que es una buena práctica en android para limitar la aplicación a una Actividad y el uso de fragmentos por toda la pantalla si la arquitectura de la aplicación lo permite?
    • Depende del proyecto, pero si se vuelve demasiado complicado para usted, usted puede separar a múltiples actividades. No tenga miedo de utilizar cualquiera de los métodos. Usted también podría usar ambos. A veces tal vez sería demasiado difícil para que usted pueda utilizar fragmentos en lugar de las actividades. Creo que usted debe tratar de utilizar fragmentos, pero no a la fuerza para estar en todas partes, si se pone demasiado en su camino…
    • lo que si quiero mantener este efecto de la ActionBar permanecer intacto y todo el contenido se cambia? Es posible lograr esto con las Actividades?
    • Lo que el Fragmento? norton ghost.ser/k3IT-IJ0J98?lista=PLOU2XLYxmsILe6_eGvDN3GyiodoV3qNsc
  4. 27

    Por eso prefiero Fragmento sobre la Actividad en TODOS los CASOS.

    • Actividad es caro. En el Fragmento, opiniones y estados de propiedad están separados – cada vez que un fragmento es en backstack, sus opiniones serán destruidos. Así que usted puede almacenar mucho más Fragmentos de la Actividad.

    • Backstack manipulación. Con FragmentManager, es fácil borrar todos los Fragmentos, insertar más que en Fragmentos y etcs. Pero para la Actividad, va a ser una pesadilla para manipular las cosas.

    • Un tanto predecible del ciclo de vida de. Mientras el anfitrión de la Actividad no es reciclado. los Fragmentos en el backstack no se recicla. Por tanto, es posible utilizar FragmentManager::getFragments() encontrar Fragmento específico (no recomendable).

    • HOLA, he leído tu opinión acerca de las ventajas de la Fragmentación sobre la Ley, ¿tienes algún proyecto para mostrar el mismo en su Repo de Github?
  5. 13

    Desde Jetpack, de una Sola Actividad de la aplicación es el preferido de la arquitectura. Útil especialmente con la Navegación Componente De La Arquitectura.

    fuente

    • Gracias por esto!
    • He leído acerca de Jetpack para el primer tiempo de hoy. 🙂 Construimos una sola actividad de las aplicaciones ya que los fragmentos fueron introducidas. Multi actividad es mucho más complicado.
    • Tienes razón, Solo la Actividad de Aplicación de la arquitectura fue la mejor solución mucho antes de Jetpack
  6. 12

    En mi opinión, no es realmente relevante. El factor clave a considerar es

    1. ¿con qué frecuencia se va a reutilizar partes de la interfaz de usuario (menús, por ejemplo),
    2. es la aplicación también para tablets?

    El uso principal de los fragmentos es construir multipane actividades, lo que lo hace perfecto para Tablet/Teléfono sensible aplicaciones.

    • Yo diría que el principal uso de los fragmentos es para hacer vistas personalizadas sin pensar en ellos como en las vistas personalizadas. que es lo que sucede de todos modos. Fragmentos estamos originalmente demostrado de Google como una forma práctica de hacer tableta sensible aplicaciones, así que usted puede seguir en las diferentes actividades, si quería. una forma para asociar código a una vista, más o menos, y ellos tienen stickable donde quiera(sin hacer vistas personalizadas).
  7. 9

    No olvides que es una actividad de la aplicación del bloque/componente que puede ser compartido y comenzó a través de la Intención! Para cada actividad en su aplicación debe resolver un solo tipo de tarea. Si usted tiene sólo una tarea en su aplicación, entonces creo que hay una sola actividad, y muchos fragmentos, si es necesario. Por supuesto, usted puede reutilizar fragmentos en las futuras actividades que resolver otra de las tareas. Este enfoque será clara y lógica la separación de tareas. Y usted no tiene que mantener una actividad con diferentes intención de parámetros de filtro para distintos conjuntos de fragmentos. Definir tareas en la etapa de diseño del proceso de desarrollo se basa en los requisitos.

    • En nuestras aplicaciones de un tipo de tarea de la actividad es llevar a cabo la navegación cajón para entrar en los diferentes fragmentos. 🙂 ¿Por qué debo lidiar con las calidades de los fragmentos? Es claro y lógico que se mantenga una referencia estática a una «global» clase de datos para datos globales y pasar algunos valores para crear un método de instancia de un fragmento.
  8. 8

    Hay más a esto que te das cuenta, usted tiene que recordar que una actividad que se inicia no implícitamente destruir la actividad de llamadas. Seguro, usted puede configurar de tal manera que su usuario hace clic en un botón para ir a una página, se inicio la página de la actividad y destruir el actual. Esto provoca una gran sobrecarga. La mejor guía que te puedo dar es:

    ** Inicio de una nueva actividad sólo si tiene sentido tener la actividad principal y esta abierto al mismo tiempo (creo que de múltiples ventanas).

    Un gran ejemplo de cuando tiene sentido tener múltiples actividades es Google Drive. La actividad principal proporciona un explorador de archivos. Cuando se abre un archivo, una nueva actividad se inició a ver ese archivo. Usted puede presionar el botón de aplicaciones recientes que le permitirá volver atrás en el navegador, sin necesidad de cerrar el documento abierto, entonces tal vez incluso abrir otro documento en paralelo a la primera.

    • Re «Iniciar una nueva actividad sólo si tiene sentido tener la actividad principal y esta abierto al mismo tiempo (creo que de múltiples ventanas).» no lo creo. Que la situación está bien resuelto con fragmentos de attach/detach métodos.
  9. 7

    Cosa que yo hice: Usar menos fragmento cuando sea posible. Desafortunadamente, es posible en casi caso. Así, termino con una gran cantidad de fragmentos y un poco de las actividades.
    Algunos de los inconvenientes que me he dado cuenta:

    • ActionBar & Menú: Cuando 2 fragmento tiene otro título, menú, que

      será difícil de manejar. Ex: cuando se agrega nuevo fragmento, puede cambiar la acción de la barra de título, pero cuando el pop de backstack no hay manera de restaurar el antiguo título. Usted puede necesitar una Barra de herramientas en cada fragmento para este caso, pero vamos creo yo, que va a gastar más tiempo.
    • Cuando necesitamos startForResult, la actividad tiene pero fragmento no.
    • No tiene animación de transición por defecto

    Mi solución para esto es utilizar una Actividad para envoltura un fragmento en el interior. Así que nos hemos separado de la barra de acción, menú, startActivityForResult, animación,…

    • Muy útil, gracias. Puede usted aclarar «una Actividad para envolver un fragmento«? Hizo una Actividad separada para cada uno de los fragmentos? Si es así, ¿necesita Fragmento en todo?
    • hay una manera de restaurar título y esas cosas. uso getSupportFragmentManager().addOnBackStackChangedListener añadir un detector. conseguir actual fragmento en el que escucha y, a continuación, establezca el título y las cosas.
  10. 4

    La gran ventaja de un fragment sobre la actividad es que , el código que se utiliza para el fragmento puede ser utilizada para diferentes actividades.así, proporciona re-usabilidad de código en el desarrollo de la aplicación.

    • Cómo? Podría dar algún ejemplo, por favor?
    • Tu pregunta no tiene mucho sentido. Cualquier código en un fragmento sigue siendo el mismo, no importa de qué actividad el fragmento es instatiated.
  11. 2

    el uso de una actividad por la aplicación para proporcionar la base para fragment
    uso fragment para la pantalla ,
    fragments son lite peso como en comparación con activites
    los fragmentos de reutilizables
    los fragmentos de adapta mejor para la aplicación que soporte tanto de teléfono & tablet

  12. 2

    Usted es libre de usar uno de esos.

    Básicamente, usted tiene que evaluar cuál es la mejor para su aplicación. Piense en cómo va a gestionar el flujo de negocios y cómo almacenar y administrar los datos de preferencias.

    Pensar, cómo los Fragmentos de almacenar la basura de datos. A la hora de implementar el fragmento, tiene una actividad de la raíz para llenar con fragmento(s). Por lo tanto, si su tratando de implementar una gran cantidad de actividades con demasiada fragmentos, usted tiene que considerar el rendimiento en su aplicación, coz que esté manipulando (toscamente habla) dos contexto del ciclo de vida, recordar la complejidad.

    Recuerde: debo usar fragmentos? ¿Por qué no yo?

    se refiere.

  13. 1

    Puedo usar Fragmentos para una mejor experiencia de usuario. Por ejemplo, si usted tiene un Botón y desea ejecutar digamos un webservice al hacer clic en él, hay que adjuntar un Fragmento de la Actividad de los padres.

    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 manera el usuario no tendrá que moverse en otra actividad.

    Y en segundo lugar yo prefiero Fragmentos debido a que usted puede manejar fácilmente durante la rotación.

  14. 1

    Depende de lo que usted quiere construir realmente. Por ejemplo, el navigation drawer utiliza fragmentos. Fichas de uso fragments así. Otra buena aplicación,es donde usted tiene una listview. Al girar el teléfono y haga clic en una fila de la actividad se muestra en la mitad restante de la pantalla. Personalmente,yo uso fragments y fragment dialogs,ya que es más profesional. Además de que se manejan más fácil en la rotación.

Dejar respuesta

Please enter your comment!
Please enter your name here