tesis studio sobre investigacion example desplegable caracteristicas bar android android-layout android-fragments android-activity android-3.0-honeycomb

studio - Android-Necesito algunas aclaraciones de fragmentos vs actividades y vistas



menu overflow android studio (12)

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

En los videos, Google sugiere que siempre que sea posible ( link1 , link2 ), deberíamos usar fragmentos en lugar de actividades, pero no explicaron exactamente por qué.

¿Cuál es el propósito de los fragmentos y algunos usos posibles de los mismos (aparte de algunos ejemplos de UI que pueden lograrse fácilmente mediante vistas / diseños simples)?

Mi pregunta es sobre fragmentos:

  1. ¿Cuáles son los propósitos de usar un fragmento?
  2. ¿Cuáles son las ventajas y desventajas de usar fragmentos en comparación con el uso de actividades / vistas / diseños?

Preguntas extra:

  1. ¿Puedes dar algunos usos realmente interesantes para los fragmentos? ¿Cosas que Google no mencionó 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 que debes recordar cuando usas fragmentos? ¿Algún consejo y advertencias de su experiencia?

# 1 y # 2 ¿cuáles son los propósitos de usar un fragmento y cuáles son las ventajas y desventajas de usar fragmentos en comparación con el uso de actividades / vistas / diseños?

Los fragmentos son la solución de Android para crear interfaces de usuario reutilizables. Puede lograr algunas de las mismas cosas utilizando actividades y diseños (por ejemplo, utilizando incluye). Sin embargo; los fragmentos están conectados a la API de Android, desde HoneyComb, y superiores. Déjame elaborar;

  • La ActionBar . Si desea pestañas para navegar por su aplicación, verá rápidamente que la interfaz ActionBar.TabListener le brinda una FragmentTransaction como un argumento de entrada al método onTabSelected . Probablemente podrías ignorar esto y hacer otra cosa e inteligente, pero estarías trabajando contra la API, no con ella.

  • El FragmentManager maneja la "espalda" de usted de una manera muy inteligente. Volver no significa volver a la última actividad, como en las actividades normales. Significa volver al estado anterior del fragmento.

  • Puede usar el genial ViewPager con un FragmentPagerAdapter para crear interfaces swipe. El código FragmentPagerAdapter es mucho más limpio que un adaptador normal y controla las instancias de los fragmentos individuales.

  • Tu vida será mucho más fácil si utilizas Fragmentos cuando intentas crear aplicaciones para teléfonos y tabletas. Dado que los fragmentos están tan ligados a las API de Honeycomb +, querrá usarlos en los teléfonos como también para reutilizar el código. Ahí es donde la biblioteca de compatibilidad es útil.

  • Incluso podrías y deberías usar fragmentos para aplicaciones destinadas solo para teléfonos. Si tienes portabilidad en mente. Utilizo ActionBarSherlock y las bibliotecas de compatibilidad para crear aplicaciones "ICS buscando", que se ven iguales a la versión 1.6. ActionBar las últimas funciones como la ActionBar , con pestañas, desbordamiento, barra de acción dividida, viewpager, etc.

Bonus 2

La mejor manera de comunicarse entre los fragmentos son las intenciones. Cuando presionas algo en un Fragmento, normalmente llamarías a StartActivity() con datos. La intención se transmite a todos los fragmentos de la actividad que lanzas.


  1. El fragmento es parte de una actividad, que aporta su propia IU a esa actividad. Fragmento puede ser pensado como una sub actividad. Cuando la pantalla completa con la que el usuario interactúa se llama actividad. Una actividad puede contener múltiples fragmentos. Los fragmentos son principalmente una parte parcial de una actividad.

  2. Una actividad puede contener 0 o varios fragmentos de fragmentos según el tamaño de la pantalla. Un fragmento se puede reutilizar en múltiples actividades, por lo que actúa como un componente reutilizable en actividades.

  3. Un fragmento no puede existir independientemente. Siempre debe ser parte de una actividad. Donde la actividad puede existir sin ningún fragmento en ella.


1.¿Propone el uso de un fragmento?

  • Respuesta:
    1. Tratar las diferencias de factor de forma del dispositivo.
    2. Pasar información entre pantallas de aplicaciones.
    3. Organización de la interfaz de usuario.
    4. Metáforas avanzadas de la interfaz de usuario.

Esta es una información importante que encontré en los fragmentos:

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 de Intención de Android no permite pasar un tipo de referencia (es decir, un objeto) directamente entre Actividades. En su lugar, el objeto debe ser serializado o una referencia accesible globalmente debe estar disponible.

Al hacer que cada pantalla sea un Fragmento separado, este dolor de cabeza que pasa los 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 de cada pantalla simplemente puede acceder a la referencia del objeto a través de la Actividad.


Fragmentos vive dentro de la Actividad y tiene:

  • su propio ciclo de vida
  • su propio diseño
  • sus propios fragmentos infantiles y etc.

Piense en los fragmentos como una subactividad de la actividad principal a la que pertenece, no puede existir por sí misma y puede ser llamada / reutilizada una y otra vez. Espero que esto ayude :)


Las actividades son los componentes de pantalla completa en la aplicación con la barra de herramientas, todos los demás son preferiblemente Fragmentos. Una actividad principal de pantalla completa con una barra de herramientas puede tener varios paneles, páginas desplazables, cuadros de diálogo, etc. (todos los fragmentos) a los que se puede acceder desde el elemento principal y comunicarse a través del elemento principal.

Ejemplo -

Actividad A, Actividad B, Actividad C -

  • Todas las actividades deben tener el mismo código repetido, por ejemplo, para mostrar una barra de herramientas básica o heredar de una actividad principal (se vuelve complicado de manejar).
  • Para pasar de una actividad a la otra, todos deben estar en la memoria (sobrecarga) o uno debe ser destruido para que la otra se abra.
  • La comunicación entre las actividades se puede hacer a través de intenciones.

vs

Actividad A, Fragmento 1, Fragmento 2, Fragmento 3 -

  • Sin repetición de código, todas las pantallas tienen barras de herramientas, etc. de esa Actividad.
  • Varias formas de pasar de un fragmento al siguiente: ver paginador, panel múltiple, etc.
  • La actividad tiene la mayoría de los datos, por lo que se necesita una comunicación mínima entre fragmentos. Si aún es necesario, se puede hacer a través de interfaces fácilmente.
  • Los fragmentos no necesitan ser de pantalla completa, la carga de flexibilidad en el diseño de ellos.
  • Los fragmentos no necesitan inflar el diseño si las vistas no son necesarias.
  • Varias actividades pueden usar el mismo fragmento.

Los fragmentos son de uso particular en algunos casos como donde queremos mantener un cajón de navegación en todas nuestras páginas. Puede inflar un diseño de marco con cualquier fragmento que desee y aún tener acceso al cajón de navegación.

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

Soy nuevo en Android y sigo pensando que un fragmento es útil de esta manera.


No estoy seguro de a qué video (s) te estás refiriendo, pero dudo que estén diciendo que debes usar fragmentos en lugar de actividades, porque no son directamente intercambiables. En realidad, hay una entrada bastante detallada en la Guía de desarrollo, considere leerla para más detalles.

En resumen, los fragmentos viven dentro de las actividades, y cada actividad puede albergar muchos fragmentos. Al igual que las actividades, tienen un ciclo de vida específico, a diferencia de las actividades, no son componentes de aplicaciones de nivel superior. Las ventajas de los fragmentos incluyen la reutilización de código y la modularidad (por ejemplo, usar la misma vista de lista en muchas actividades), incluida la capacidad de crear interfaces de múltiples paneles (principalmente útiles en tabletas). La principal desventaja es (algo) de complejidad añadida. Por lo general, puede lograr lo mismo con vistas (personalizadas) de una manera no estándar y menos robusta.


Sé que esto ya se discutió hasta la muerte, pero me gustaría agregar algunos puntos más:

  • Los frags se pueden usar para rellenar los Menu y pueden manejar los clics de MenuItem por su cuenta. Dando así más opciones de modulación para sus actividades. Puede hacer cosas de ContextualActionBar y demás sin que su Actividad lo sepa y, básicamente, puede desacoplarlas de las cosas básicas que maneja su Actividad (Navegación / Configuración / Acerca de).

  • Un Frag primario con frags secundarios puede ofrecerle más opciones para modular sus componentes. Por ejemplo, puedes intercambiar fácilmente Frags, colocar Frags nuevos dentro de un Buscapersonas o eliminarlos, reorganizarlos. Todo sin que tu Actividad sepa nada al respecto, solo se enfoca en las cosas de nivel superior.


Un Fragmento es una parte de la interfaz de usuario de una aplicación o comportamiento que se puede colocar en una Actividad que permite un diseño de actividad más modular. No estará mal si decimos que un fragmento es un tipo de subactividad.

Los siguientes son puntos importantes sobre un fragmento:

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

  2. Puede agregar o eliminar fragmentos de una actividad mientras la actividad se está ejecutando.

  3. Puede combinar varios fragmentos en una sola actividad para crear una interfaz de usuario de varios paneles.

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

  5. El ciclo de vida del fragmento está estrechamente relacionado con el ciclo de vida de su actividad de host.

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

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

  8. Los fragmentos se agregaron a la API de Android 3 en Android 3 (Honeycomb) con API versión 11.

Para más detalles, visite el sitio oficial, Fragments .


Un fragmento representa un comportamiento o una parte de la interfaz de usuario en una actividad. Puede combinar varios fragmentos en una sola actividad para crear una interfaz de usuario de múltiples paneles y reutilizar un fragmento en varias actividades. Puede pensar en un fragmento como una sección modular de una actividad, que tiene su propio ciclo de vida, recibe sus propios eventos de entrada y que puede agregar o eliminar mientras la actividad se está ejecutando.

  • Puede manipular cada fragmento de forma independiente, como agregarlos o eliminarlos. Cuando realiza una transacción de fragmento de este tipo, también puede agregarla a una pila de respaldo que está gestionada por la actividad; cada entrada de la pila de respaldo de la actividad es un registro de la transacción de fragmento que se produjo. La pila trasera permite al usuario revertir una transacción de fragmento (navegar hacia atrás), presionando el botón Atrás.

  • Cuando agrega un fragmento como parte de su diseño de actividad, vive en un grupo de vistas dentro de la jerarquía de vistas de la actividad y el fragmento define su propio diseño de vista. Puede insertar un fragmento en el diseño de su actividad declarando el fragmento en el archivo de diseño de la actividad, como un elemento, o desde el código de su aplicación, agregándolo a un ViewGroup existente. Sin embargo, no se requiere que un fragmento sea parte del diseño de la actividad; También puede usar un fragmento sin su propia interfaz de usuario como trabajador invisible para la actividad.

  • Por ejemplo: si utilizara NavigationDrawer sin Fragmentos, sería mejor mantener la instancia de NavigationDrawer en una sola Actividad y cuando navegue por la aplicación seleccionando de los elementos en NavigationDrawer, entonces no se deben implementar cada una de las Actividades que se inician. NavigationDrawer, pero en su lugar debería implementar el botón Atrás para volver a la actividad / actividad "principal" en la que se implementó NavigationDrawer.

    Nota: Si desea implementar NavigationDrawer en varias Actividades, tendría que volver a crear una nueva instancia de NavigationDrawer en cada Actividad que desee mostrar.

    Supongo que esto sería una desventaja en comparación con el uso de Fragmentos, mientras que si utilizara un fragmento no necesitaría muchas instancias del cajón, solo necesitaría uno.

    Cajón con fragmentos en lugar de actividades.

    Si usa NavigationDrawer con Fragmentos, el cajón debe implementarse en una sola Actividad y cuando se selecciona cada elemento del cajón, su contenido se muestra en cada uno de sus Fragmentos.

  • Comuníquese entre el fragmento a su Actividad : Para permitir que un Fragmento se comunique hasta su Actividad, puede definir una interfaz en la clase Fragmento e implementarla dentro de la Actividad. El Fragmento captura la implementación de la interfaz durante su método de ciclo de vida onAttach () y luego puede llamar a los métodos de la Interfaz para comunicarse con la Actividad.

    public class YourFragment extends ListFragment { OnSelectedListener mCallback; // Container Activity must implement this interface public interface OnSelectedListener { public void onItemSelected(int position); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.your_view, container, false); } @Override public void onAttach(Activity activity) { super.onAttach(activity); // This makes sure that the container activity has implemented // the callback interface. If not, it throws an exception try { mCallback = (OnSelectedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnSelectedListener"); } } }...

Ahora el fragmento puede entregar mensajes a la actividad llamando al método onItemSelected () (u otros métodos en la interfaz) usando la instancia mCallback de la interfaz OnSelectedListener.

public static class MainActivity extends Activity implements YourFragment.OnSelectedListener{ ... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); } public void onItemSelected(int position) { // The user selected the headline of an article from the YourFragment // Do something here to display that article YourFragment yourFrag = (YourFragment) getSupportFragmentManager().findFragmentById(R.id.your_fragment); if (yourFrag != null) { // If your frag is available, we''re in two-pane layout... // Call a method in the YourFragment to update its content yourFrag.updateView(position); } else { // Otherwise, we''re in the one-pane layout and must swap frags... // Create fragment and give it an argument for the selected item YourFragment newFragment = new YourFragment(); Bundle args = new Bundle(); args.putInt(YourFragment.ARG_POSITION, position); newFragment.setArguments(args); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack so the user can navigate back transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); } } }


Un fragmento vive dentro de una actividad.

Mientras una actividad vive en sí misma.