2011-12-21 12 views
94

Sé por qué usar fragmentos y el sitio para desarrolladores de Android lo explica bien. Pero en la mayoría de los casos quiero que en las tabletas las diferentes partes tengan su propio comportamiento especial y su IU, y no sé cómo los fragmentos pueden ayudar. En la mayoría de los casos, creo que es más rápido crear 2 actividades diferentes (1 para tabletas y 1 para teléfonos) y para compartir los comportamientos y eventos comunes en una tercera clase. Teniendo esto en cuenta, ¿por qué debería usar fragmentos?¿Cuándo debería usar fragmentos en las aplicaciones de Android? ¿Por qué usar fragmentos?

Respuesta

69

Los fragmentos son más de un beneficio de interfaz de usuario en mi opinión. Es conveniente para el usuario a veces ver dos vistas diferentes de dos clases diferentes en la misma pantalla. Si, en tu momento de creatividad, decides que sería bueno mostrar tu aplicación con, digamos, una lista que ocupa la mitad de la pantalla y una vista web que ocupa la otra mitad, de modo que cuando haces clic en un elemento de la lista El fragmento A transmite un intento a la vista web en el fragmento B, y de repente ves lo que acabas de hacer clic sin las actividades de cambio de aplicación, entonces puedes usar un fragmento. Es solo un ejemplo que surgió de la parte superior de mi cabeza.

Conclusión: los fragmentos son dos o más actividades en la pantalla al mismo tiempo.

+61

¿Por qué usar fragmentos cuando puede hacer exactamente lo mismo con diferentes diseños principales y diferentes clases? Es más fácil tener dos diseños principales, uno para la lista y el otro para la vista web. Personalmente creo que tu respuesta es incorrecta, ya que solo dijiste para qué se usan los fragmentos, no por qué deberías usarla en lugar de una actividad que aloja dos clases.De hecho, tener una actividad y hospedar dos clases es más fácil ya que no necesita lidiar con los intentos e interfaz parcelable para serializar los objetos que desea pasar. obtienes acceso de clase directo – jonney

+0

Entonces, ¿se recomienda utilizar fragmentos para un formulario de búsqueda que sea visible en más de una actividad? – Muatik

+0

OMG Entonces, ¿así es como algunas aplicaciones ahora muestran nuevas "vistas" cuando toco algo? Entonces, para usar un fragmento, ¿tenemos simplemente (por ejemplo) un archivo de diseño principal y luego usamos '' dentro de ese archivo donde deseamos incluir un fragmento? Y tal vez, si no queremos que un fragmento esté siempre allí, ¿ocultarlo y mostrarlo cuando sea necesario o inyectarlo cuando sea necesario? – username

14

Google le aconseja usar SIEMPRE Fragmentos.

¿Por qué? Es simple:

En el caso más simple, los fragmentos se utilizan como contenedores de actividades.

¿Por qué necesita esto? Nuevamente, es simple.

Android 4 (ICS) admite tanto teléfonos inteligentes como tabletas. Esto significa que la MISMA aplicación se ejecutará en un teléfono inteligente y una tableta y es probable que sean muy diferentes.

Las tabletas tienen pantallas grandes que estarán vacías o sin usar, a menos que las asigne correctamente.

Eso significa- Poner dos fragmentos en una actividad como lista de contactos e información de contacto.

El smatphone mostrará la lista de contactos y, en una pantalla táctil, mostrará la información del contacto.

En una tableta, el usuario seguirá viendo la lista y la información estará junto a ella.

2 fragments- en una pantalla ....

inteligente? sí ... se supone que es compatible hacia atrás hasta Android 1.6 ......


######################## #####################################

OK, ¿Ya lo sabía? entonces - solo trate de entender el caso resuelto:

Muchas cosas funcionan de esa manera - liste & detalles, Menús y Submenús, Información detallada y más información detallada. Desea una forma de mantenerlo natural y sin problemas para una tableta que espera preformar de esa manera, pero no puede esperar que el teléfono inteligente lo muestre todo como lo hizo la tableta ...

¿Obtiene esto?

para obtener más información, consulte this. Realmente pienso sólo tiene que coger el concepto ....

+0

Si el concepto es clear..But en interfaces simples, donde las diferentes actividades no tiene relación directa y cada actividad es sencilla una contenedor de datos ... ¿son realmente necesarios los fragmentos? ¿Puedo evitar eso? Y desde otra perspectiva, en cualquier caso, el programa debería adaptarse para ejecutarse en una pantalla diferente, independientemente de que utilice fragmentos o no. –

+1

Tiene razón, no necesita Fragmentos para admitir varios tamaños de pantalla. Pero deberían hacerlo más fácil. Debería poder instanciar exactamente el mismo fragmento como una actividad de pantalla completa en un teléfono o como una pantalla parcial en una tableta con solo unas pocas líneas de código para ver la diferencia. Además, debido a que los fragmentos manejan parte de su propio ciclo de vida, tiene menos de qué preocuparse. – Sparky

+1

"Google le recomienda utilizar SIEMPRE Fragmentos." No estoy de acuerdo con eso. Personalmente, creo que es útil solo cuando el dispositivo está diseñado para presentar un panel o dos paneles de vista, de acuerdo con su tamaño. – user1914692

55

Los beneficios I ver cuando se utilizan fragmentos son:

  • encapsulación de la lógica.
  • Mejor manejo del ciclo de vida del fragmento.
  • Reutilizable en otras actividades.

Los inconvenientes I ver son:

  • Más código (Por ejemplo, una instancia de un gestor de fragmento, la adición de la transacción fragmento, escribiendo las devoluciones de llamada del fragmento)
  • Comunicación entre los fragmentos y las actividades son más difíciles. Como lo dijo @jonney, necesitaría lidiar con una interfaz parcelable para serializar sus objetos que desea pasar.

Por lo tanto, cuando se decide utilizar un fragmento, me hago la siguiente pregunta:

  • es el ciclo de vida del fragmento diferente del ciclo de vida de la actividad?

Si el ciclo de vida es diferente, obtiene un mejor manejo del ciclo de vida utilizando un fragmento. Por ejemplo, si quieres destruir el fragmento, pero no la actividad. Tal es el caso, cuando tiene un pager adapter.

  • ¿El fragmento se va a usar en varias actividades?

Los eventos de entrada del usuario serán reutilizables si usa un fragmento.

  • ¿La cantidad de comunicación entre el fragmento y la actividad es pequeña?

Si necesita pasar grandes objetos al fragmento, tendría que tratar con el código que los serializa. Además, si necesita comunicarse entre fragmentos y actividades, probablemente necesite implementar interfaces. Esto, en la mayoría de los casos, agrega complejidad a su base de código. No es un factor diferenciador, sino un criterio a tener en cuenta.

+0

No es solo una cuestión de programación. Simplemente creo que hacer una aplicación no es solo escribir el código fuente, sino lidiar con algunos problemas de interfaz de usuario para tabletas que son diferentes a los problemas para los teléfonos, y para ser honesto, realmente no me gusta demasiado cómo se supone que los fragmentos deben resolver la brecha entre los tamaños de pantalla. Hacer una aplicación realmente no se trata de llenar los espacios vacíos con algunas piezas redundantes. Incluso desde un punto de vista de programación, si mis piezas tienen problemas para comunicarse, una de las otras prefiero crear una clase de puerta de enlace con cosas comunes en lugar de luchar con tuberías débiles. –

+0

sobre esta oración "¿Es el ciclo de vida del fragmento diferente del ciclo de vida de la actividad?". He tenido casos de lotsa que el punto de vista que está sujeto a ser un grupo de vista separado tiene el mismo ciclo de vida. pero utilicé el fragmento porque quería usarlo en varios lugares y, al mismo tiempo, tenía que ser consciente del ciclo de vida y hacer algo de lógica depende de eso. mientras que si utilicé viewgroup necesitaba informar al grupo de vista sobre el ciclo de vida de la actividad llamando a un método onResume personalizado manualmente. –

8

Los expertos le dirán: "Cuando vea la IU, sabré si utilizar Activity o Fragment". Al principio, esto no tendrá sentido, pero con el tiempo, en realidad podrá saber si necesita Fragment o no.

Hay una buena práctica que me ha ayudado mucho. Se me ocurrió mientras intentaba explicarle algo a mi hija.

A saber, imagine una caja que representa una pantalla. ¿Puedes cargar otra pantalla en esta casilla? Si usa una nueva caja, ¿tendrá que copiar varios artículos de la 1ra casilla?Si la respuesta es Sí, entonces debe usar Fragmentos, 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 un contenedor de caja (Activity) o sus partes se dispersarán. Entonces una caja con partes adentro.

Ten en cuenta que no se debe hacer mal uso de la caja. Los expertos de Android UX aconsejan (puedes encontrarlos en YouTube) cuando deberíamos cargar explícitamente otro Activity, en lugar de usar un Fragmento (como cuando tratamos el Cajón de navegación que tiene categorías). Una vez que se sienta cómodo con Fragments, puede ver todos sus videos. Aún más son material obligatorio.

¿Puedes mirar ahora tu UI y averiguar si necesitas un Activity o un Fragment? ¿Obtuviste una nueva perspectiva? Creo que lo hiciste :)

+1

Es un duplicado del tema [this] (http://stackoverflow.com/a/25993052/2057291). Mismo autor, el mismo día, solo unos pocos minutos de diferencia. – tommus

4

Históricamente, cada pantalla en una aplicación de Android se implementó como una actividad separada. Esto crea un desafío al pasar información entre pantallas porque el mecanismo Android Intent no permite pasar un tipo de referencia (es decir, un objeto) directamente entre Actividades. En su lugar, el objeto debe ser serializado o debe haber una referencia accesible a nivel mundial disponible.

Al hacer que cada pantalla sea un Fragmento separado, este dolor de cabeza que pasa datos se evita por completo. Los fragmentos siempre existen dentro del contexto de una Actividad dada y siempre pueden acceder a esa Actividad. Al almacenar la información de interés dentro de la Actividad, el Fragmento para cada pantalla puede acceder simplemente a la referencia del objeto a través de la Actividad.

https://softwareengineering.stackexchange.com/questions/244771/why-use-android-fragments

0

soporte primario Fragmento más dinámico & pantalla de interfaz de usuario de pantalla grande como Tablet.Because tableta es mucho más grande que lo normal del teléfono. Hay más espacio para combinar & Interchange UI Component.

Fragmento permiten dicho diseño sin la necesidad de un cambio tan complejo en la jerarquía de Vista.

por estructura la actividad de división en el fragmento, somos capaces de modificar el aspecto de la actividad en tiempo de ejecución

Cuestiones relacionadas