En Android API 11+, Google ha lanzado una nueva clase llamada Fragment.

En los videos, Google sugiere que siempre que sea posible (link1, link2), debemos utilizar fragmentos en lugar de las actividades, pero no se explicar exactamente por qué.

¿Cuál es el propósito de fragmentos y algunos usos posibles de ellos (a excepción de algunos ejemplos de interfaz de usuario que puede ser fácilmente alcanzado por el simple views/layouts)?

Mi pregunta es acerca de los fragmentos:

  1. ¿Cuáles son los efectos de la utilización de un fragmento?
  2. ¿Cuáles son las ventajas y desventajas de la utilización de fragmentos comparación con el uso de actividades/views/layouts?

Bono preguntas:

  1. Puede dar algunos realmente interesantes usos de los fragmentos? Cosas que Google no mencionar en sus videos?
  2. ¿Cuál es la mejor manera de comunicarse entre los fragmentos y las actividades que los contienen?
  3. ¿Cuáles son las cosas más importantes a recordar cuando se utiliza fragmentos? Cualquier consejos y advertencias de su experiencia?

10 Comentarios

  1. 261

    #1 & #2 ¿cuáles son los efectos de la utilización de un fragmento de & ¿cuáles son los
    ventajas y desventajas del uso de fragmentos comparación con el uso de
    actividades/views/layouts?

    Fragmentos de Android es la solución para crear reutilizables interfaces de usuario. Usted puede conseguir algunas de las mismas cosas mediante actividades y presentaciones (por ejemplo mediante incluye). Sin embargo, los fragmentos están cableados en el Android API, de nido de abeja, y hasta. Permítanme elaborar;

    • La ActionBar. Si quieres pestañas para navegar por la aplicación, puedes ver rápidamente que ActionBar.TabListener interfaz le da un FragmentTransaction como un argumento de entrada a la onTabSelected método. Usted probablemente podría ignorar esto, y hacer algo más y listo, pero estaría trabajando en contra de la API, no con ella.

    • La FragmentManager se encarga de «atrás» para que de una manera muy inteligente. De nuevo no significa volver a la última actividad, como para las actividades ordinarias. Esto significa volver a la anterior fragmento estado.

    • Puede utilizar el fresco ViewPager con un FragmentPagerAdapter para crear pase de interfaces. El FragmentPagerAdapter código es mucho más limpio que un adaptador, y los controles de las instancias de los fragmentos individuales.

    • Tu vida será mucho más fácil si se utilizan Fragmentos cuando intenta crear aplicaciones para teléfonos y tabletas. Dado que los fragmentos están tan ligados con el Panal+ Api, usted quiere hacer uso de ellos en los teléfonos así la reutilización de código. Que es donde la biblioteca de compatibilidad viene muy bien.

    • Que incluso podría y debería utilizar fragmentos de aplicaciones destinado únicamente para los teléfonos. Si usted tiene la portabilidad en mente. Yo uso ActionBarSherlock y la compatibilidad de las bibliotecas para crear «ICS» mirando apps, que tienen el mismo aspecto de todo el camino de vuelta a la versión 1.6. Usted obtener las últimas características como la ActionBar, con pestañas, desbordamiento de división de la barra de acción, viewpager etc.

    Bono de 2

    La mejor manera de comunicarse entre los fragmentos de las intenciones. Cuando se presiona algo en un Fragmento típico de la llamada StartActivity() con los datos en él. La intención es que pasa en todos los fragmentos de la actividad de lanzamiento.

    • primero de todo ,gracias.agradezco a las personas que dan informativo(aunque corto) de las respuestas y no me acaba de dar un enlace a un manual .de todos modos, además de características adicionales para trabajar en clases especiales , se puede pensar en las ventajas y desventajas de trabajar con fragmentos?
    • Yo creo que hay que ser más directo en el que el interrogatorio. Me acabo de dar cuatro grandes ventajas por encima.
    • ok , ¿y desventajas en comparación con las vistas personalizadas y actividades?
    • ¿cómo comunicar entre los fragmentos uso de las intenciones? hacer todos los fragmentos deben ser «vivo» (añadido a la actividad), para que puedan comunicarse el uno con el otro?
    • Uno de los cables nunca deben de hablar directamente a otro fragmento – en lugar de ir a través de la actividad de los padres. De esta manera no acabar con espaguetis código, pero fácil de manejar código.
    • Siempre he estado buscando en fragmentos como algo similar a la Web de vistas parciales.. y me estoy empezando a entender que yo estaba equivocado o, mejor, que yo no estaba bien. Gracias por la explicación de @GlennBech, voy a tomar tu respuesta como una señal para proseguir con el asunto 😉
    • la gran pregunta es ¿cómo un desarrollador saber cuando usar un fragmento y cuándo no usar un fragmento?
    • Por lo que vale, a mí me parece que el corazón de su respuesta es reusable, en Fragments are ... reusable user interfaces. Esto sugiere que ellos son los apropiados/vale la pena si usted espera que el uso de ellos en más de una actividad. Pero los detalles de su respuesta, no se mucho acerca de re-use. Un mejor término podría ser modular. Una aplicación simple que es meramente una serie de pantallas es fina como una serie de actividades. Una vez que el diseño tiene un flujo más complejas o estructura, a menudo es más fácil para mantener el estado de una actividad, y que la actividad de administrar algunos fragmentos. (Por CIERTO, cierto incluso si los fragmentos son de pantalla completa.)
    • Re «La mejor manera de comunicarse entre los fragmentos de intenciones» ¿Eh? Yo no lo creo. las calidades son para la comunicación entre actividades. La forma de comunicarse «entre los fragmentos» es .. no. Es decir, no se comunican directamente fragmento a fragmento, en lugar de un fragmento debe hacer una devolución de llamada en una interfaz personalizada a ser dueño de su actividad, la que decide qué hacer.
    • No estoy totalmente de acuerdo. Las devoluciones de llamada puede llegar a ser muy desordenado. Si una actividad tiene tres fragmentos que pueden emitir dos «eventos», el anfitrión de la actividad tendrá que implementar seis métodos. A partir de Java punto de vista arquitectónico, estos métodos pertenecen a los fragmentos, (Cohesión), ya que normalmente se manipulan sobre el estado de los fragmentos. Si usted piensa de la interfaz de usuario de la acción de eventos, y el uso de las calidades de las transmisiones o de comunicarse con ellos, usted puede obtener el código limpio, donde los fragmentos de reaccionar a los acontecimientos externos y la actualización de su estado interno a sí mismos.
    • no es sólo acerca de espaguetis código, pero se frustra el caso de utilización de la capacidad de reutilización….sólo es importante propiedad de ser componente reutilizable es que no debe saber nada sobre el mundo exterior.
    • ahh, está describiendo una situación en la que varios fragmentos de activo al mismo tiempo, así que tiene sentido para reaccionar a un mensaje de difusión. Yo estaba pensando en una situación diferente, donde un fragmento es el paso de la información «hacia adelante» otro fragmento que podría no existir. Así, en mi mente, era más fácil simplemente pasar un objeto a la actividad, que ya tenía lógica para instanciar el segundo fragmento. Luego se fue a la actividad a decidir la mejor manera de pasar la información a la nueva fragmento.
    • o usted está describiendo un diseño que se basa en el lanzamiento de nuevas actividades, en lugar de la gestión de los fragmentos dentro de una sola actividad. Usted dice que «Cuando se presiona algo en un Fragmento típico de la llamada StartActivity() con los datos en él. .. la actividad de lanzamiento.» Pero ese es mi punto: intento es significativo cuando se comunica con otra actividad; en mi humilde opinión no es «mejor» solución a la hora de manipular los fragmentos de ellos sin iniciar otra actividad.

  2. 67

    No está seguro de qué vídeo(s) que usted se refiere, pero dudo que están diciendo que usted debe utilizar fragmentos en lugar de las actividades, debido a que no son directamente intercambiables. De hecho, hay una bastante entrada detallada en el Dev Guía, considere la posibilidad de la lectura para más detalles.

    En resumen, los fragmentos de vivir dentro de las actividades y cada actividad puede alojar muchos fragmentos. Como actividades, que tienen un ciclo de vida, a diferencia de las actividades, que no son de nivel superior de los componentes de la aplicación. Ventajas de los fragmentos que incluyen la reutilización de código y la modularidad (por ejemplo, utilizando la misma lista de la vista en muchas de las actividades), incluyendo la capacidad para construir multi-panel de interfaces (útil sobre todo en tablets). La principal desventaja es que (algunos) mayor complejidad. Por lo general, puede lograr lo mismo con (personalizado) vistas en un no-estándar y menos robusta.

    • actualizado pregunta . ahora tiene los enlaces a los videos de google. también, gracias por la explicación, pero aún necesita aclaraciones acerca de mi pregunta.
    • Leer el dev de la guía de entrada, no tiene más que suficientes detalles. Es poco probable que usted va a obtener una respuesta a ‘cool usos de fragmentos» en la MANERA-la manera vaga y no hay una única respuesta. El número 4 es specificlly respondió en el dev guía– developer.android.com/guide/topics/fundamentals/…
    • hasta donde yo sé , este método crea una dependencia de que la actividad puede contener, que fragmenta . también , por favor conteste las preguntas principales (los dos primeros) .
    • Gracias a los desarrolladores de android para insistir en las respuestas a la pregunta básica. ATM no he visto nada útil para mí en el Fragmento de la clase sobre el uso de XML «incluir» de la etiqueta. El tipo de cosas que me gustaría encontrar valiosa sería la capacidad de especificar un diseño que por arte de magia se transforman en la mejor experiencia de usuario en todas las resoluciones. De lo que puedo decir, usted todavía tiene que hacer que en el código por ti mismo. Otro valor potencial, sería una forma de paquete de código + recursos en componentes reutilizables que no se encuentra en la reutilización de aplicaciones, pero de nuevo no parece estar allí. Yo quiero una razón realmente buena.
    • Yo estoy empezando a entender la forma en la que Google sugieren el uso de fragmentos, pero estoy bastante de acuerdo con @NikolayElenkov.. Para mí, el uso de Actividades parece ser la más robusto y menos complejo manera..
    • aún no tiene respuesta ¿por qué no usar simplemente vistas personalizadas o cómo los fragmentos que difieren en mucho de las vistas personalizadas, con el cual usted puede hacer las mismas cosas y re-usabilidad así. la respuesta a eso es que google no quiere que el uso de vistas personalizadas y proporciona los fragmentos en su lugar. desgraciadamente, un montón de android opciones de mejores prácticas son como este.

  3. 44

    Un Fragmento de una pieza de una aplicación de la interfaz de usuario o de comportamiento que puede ser colocado en una Actividad que permiten una más modular la actividad de diseño. No va a ser malo si decimos que un fragmento es un tipo de subactivity.

    Siguientes son puntos importantes acerca de un fragmento:

    1. Un fragmento tiene su propio diseño y su propio comportamiento con su propio ciclo de vida de las devoluciones de llamada.

    2. Usted puede agregar o quitar los fragmentos en una actividad, mientras que la actividad se está ejecutando.

    3. Puede combinar múltiples fragmentos en una sola actividad para construir un multi-interfaz de usuario del panel.

    4. Un fragmento puede ser utilizado en múltiples actividades.

    5. El fragmento de ciclo de vida está estrechamente relacionado con el ciclo de vida de su anfitrión de la actividad.

    6. Cuando la actividad está en pausa, todos los fragmentos disponibles en el acivity también se detendrá.

    7. Un fragmento se puede implementar un comportamiento que no tiene componente de interfaz de usuario.

    8. Fragmentos fueron agregadas a Android API en Android 3 (Panal) con la API de la versión 11.

    Para más detalles, por favor visite el sitio web oficial, Fragmentos.

    • 1. Como se mencionó en el punto #8, no tiene que tener un diseño. 6. se perdió la parte después de «medios» . De todos modos, gracias por ayudar a otros a hacer esto más claro. Voy a dar +1 .
    • Con respecto a #8, un posible ejemplo de no-diseño de fragmento (es decir, ‘sin cabeza’ fragmento) sería la que lleva a cabo una tarea que a pesar de ser algo corto, como por ejemplo un corto solicitud HTTP) es todavía necesario para sobrevivir a los cambios de configuración y por lo tanto depende de la exacta del fragmento de la instancia de ser preservada a través de ellos (mediante el uso de setRetainInstance(true) en el fragmento). Como para el diseño de los fragmentos, setRetainInstance(true), no tiene mucho sentido, ya que impide que los recursos asociados con sus puntos de vista desde el que se libera hasta cuando sea necesario (es decir, una pérdida de memoria).
    • NOTA: «#8» es ahora «#7».
  4. 16

    Esto es importante la información que he encontrado en fragmentos:

    Históricamente cada pantalla en una aplicación para Android que fue llevado a cabo como una Actividad separada. Esto crea un desafío en el paso de la información entre las pantallas porque el Android Intención mecanismo no permite pasar de un tipo de referencia (es decir, el objeto) directamente entre las Actividades. En su lugar el objeto debe ser serializado o un acceso global de referencia disponibles.

    Haciendo de cada pantalla por separado un Fragmento, esta transferencia de datos dolor de cabeza
    es completamente evitado. Fragmentos de existir siempre en el contexto de un
    dada la Actividad y siempre se puede acceder a esa Actividad. Mediante el almacenamiento de la
    información de interés dentro de la Actividad, el Fragmento para cada
    pantalla simplemente pueden acceder a la referencia de objeto a través de la Actividad.

    Fuente: https://www.pluralsight.com/blog/software-development/android-fragments

    • Eso es cierto, pero hay soluciones para esto: el uso de Parcelable cuando no es un enorme objeto (y hay un plugin para hacer más fácil), y si se trata de un enorme objeto, siempre se puede utilizar una referencia estática que se establece en null cuando llegue a la nueva actividad (o cuando se destruyen, dependiendo de su requisito).
    • Parcelable» se ajusta a mi definición de «datos de pasar el dolor de cabeza que es evitado por el uso de Fragmentos». Si no es complejo compartidos estado que debe persistir mientras que una serie de pantallas que pasa, una Actividad + Fragmentos es una buena solución, en mi humilde opinión. (A pesar de que he abandonado el Fragmento de la parte posterior de la pila, y hice mi propia administración de lo que «volver» significa.)
    • Usando la interfaz patrón de diseño entre los fragmentos a través de un contenedor de actividad es mucho enfoque modular para pasar no sólo objetos, sino también de evento click de los oyentes y de los argumentos del método a otros fragmentos o el contenedor principal de la actividad.
  5. 7

    Fragmentos son de uso particular, en algunos casos, como cuando queremos mantener un cajón de navegación en todas nuestras páginas. Usted puede inflar un marco de diseño con cualquier fragmento que desea y todavía tener acceso a la navegación cajón.

    Si hubiera utilizado una actividad, usted habría tenido que mantener el cajón en todas las actividades que hace que para el código redundante. Este es un uso interesante de un fragmento.

    Soy nuevo en Android y aún piensa que un fragmento es útil esta manera.

    • Sí. Sin embargo, todavía estoy a veces confundido acerca de la forma correcta de utilizar fragmentos, y eso es debido a la compleja del ciclo de vida de ambos fragmentos y actividades.
    • ¿usted acaba de actividades de uso de la mayoría?
    • Cuando el apoyo a las tabletas, creo que es mejor utilizar Fragmentos. También, cuando el apoyo a los cambios de orientación y otros eventos similares, puede que desee utilizar DialogFragment, ya que le permite restaurar
    • eso es lo que yo pienso así. No he utilizado DialogFragments tan a menudo. Para ayudar a la modularidad de la lógica, una gran cantidad de desarrolladores de android están empezando a utilizar las vistas personalizadas para mantener la lógica de la plaza del mortero. Aquí está una reciente charla en vistas personalizadas impartido por un ingeniero de Airbnb vimeo.com/127799187
    • el uso de fragmentos también podría ser útil si usted piensa que el actual de la pantalla podría ser parte de otro de la pantalla.
    • realmente no habría nada que le impida la creación de las vistas en la misma actividad, aunque el uso de vistas personalizadas. lo que fragmentos de hacer es darle algo repetitivo para tomar el cuidado de las cosas para crear una «vista personalizada» en una clase de una manera estándar. los fragmentos fueron creados en un momento en que google las mejores prácticas de los predicadores ni siquiera menciona la posibilidad de crear sus propios puntos de vista.

  6. 4

    Sé que esto se ha discutido hasta la muerte, pero me gustaría añadir algunos puntos más:

    • Frags se puede usar para rellenar Menus y puede manejar MenuItem hace clic en sus propios. Dando así más opciones de modulación para sus Actividades. Usted puede hacer ContextualActionBar cosas, y así sucesivamente sin que su Actividad se entere y, básicamente, se puede separar de las cosas básicas de su Actividad asas (Navegación/Ajustes/Acerca de).

    • Un padre Frag con el niño Fragmentos que pueden darle más opciones a modulize sus componentes. E. g. usted puede cambiar fácilmente los Frags alrededor, poner nuevos Fragmentos en el interior de un Buscapersonas o quitarlos, reorganizarlos. Todo ello sin Actividad saber nada al respecto sólo se centra en el nivel superior de las cosas.

  7. 3

    Actividades son los componentes de las pantallas de la aplicación con la barra de herramientas, todo lo demás son de preferencia de los Fragmentos.
    Una pantalla completa de actividad de los padres con una barra de herramientas puede tener varios paneles desplazables páginas, cuadros de diálogo, etc. (todos los fragmentos), todos de los cuales se puede acceder desde el padre y comunicarse a través de los padres.

    Ejemplo:

    La Actividad A Actividad B Actividad C:

    • Todas las actividades deben tener el mismo código repetido, para mostrar un básico
      la barra de herramientas, por ejemplo, o heredar de un padre de la actividad (que se convierte en
      engorroso de manejar).
    • Para pasar de una actividad a otra, o bien todos ellos necesitan estar en la memoria (sobrecarga) o uno que debe ser destruido para que la otra abierta.
    • La comunicación entre las actividades se pueden realizar a través de las Intenciones.

    vs

    Actividad, Fragmento 1, Fragmento 2, Fragmento 3:

    • Ningún código de repetición, todas las pantallas tienen barras de herramientas, etc. a partir de esa actividad.
    • Varias maneras de moverse de un fragmento de la próxima vista de buscapersonas, multi panel, etc.
    • Actividad tiene la mayoría de los datos, por lo que el mínimo inter-fragmento de comunicación necesarios. Si todavía es necesario, se puede hacer a través de interfaces fácilmente.
    • Fragmentos no necesitan ser pantalla completa, un montón de flexibilidad en el diseño de ellos.
    • Fragmentos no necesita inflar el layout si las opiniones no son necesarias.
    • Varias actividades pueden utilizar el mismo fragmento.
  8. 0

    Un fragmento de la vida dentro de una actividad.

    Mientras que una actividad de la vida en sí misma.

    • «en sí mismo»? Tal vez «en su propia»? O «por sí mismo»?
  9. 0

    Fragmentos de vidas dentro de la Actividad y ha:

    • su propio ciclo de vida
    • su propio diseño
    • su propio hijo fragmentos y etc.

    Pensar en Fragmentos como un subgrupo de la actividad de la actividad principal a la que pertenece, no puede existir de su propia y puede ser llamado/reutilizados una y otra vez. Espero que esta ayuda 🙂

    • En realidad, sobre el segundo punto («su propio diseño»), esto es opcional . Un fragmento de no tener a la vista.
  10. 0

    1.A los efectos de la utilización de un fragmento?

    • Ans:
      1. Tratar con dispositivos de factor de forma de las diferencias.
      2. El paso de la información entre la aplicación de las pantallas.
      3. De la interfaz de usuario de la organización.
      4. Avanzada interfaz de usuario de metáforas.

Dejar respuesta

Please enter your comment!
Please enter your name here