Diferencia entre Fragment Y FragmentActivity


Mi pregunta es aparte de la evidente herencia diferencias, ¿cuáles son las principales diferencias entre Fragment y FragmentActivity? ¿A qué escenarios se adapta mejor cada clase? Estoy tratando de entender por qué existen estas dos clases...

Author: ToolmakerSteve, 2012-05-16

4 answers

A Fragment es una sección de un Activity, que tiene:

  • su propio ciclo de vida
  • recibe sus propios eventos de entrada
  • se puede agregar o eliminar mientras se ejecuta el Activity.

Un Fragment siempre debe estar incrustado en un Activity.

Fragments no forman parte de la API antes de HoneyComb (3.0). Si desea utilizar Fragments en una aplicación dirigida a una versión de plataforma anterior a HoneyComb, debe agregar el paquete de soporte a su proyecto y usar las FragmentActivity para sostener su Fragments. La clase FragmentActivity tiene una API para tratar con Fragments, mientras que la clase Activity, anterior a HoneyComb, no lo tiene.

Si su proyecto está dirigido a HoneyComb o más reciente solamente, debe usar Activity y no FragmentActivity para mantener su Fragments.

Algunos detalles:

Usar android.app.Fragment con Activity. Usar android.support.v4.app.Fragment con FragmentActivity. No agregue el paquete de soporte Fragment a un Activity ya que causará que se lance una Excepción.

Una cosa a tener en cuenta: FragmentManager y LoaderManager tienen versiones de soporte separadas para FragmentActivity:

Si está utilizando un Fragment en un Activity (panal y superior), llame a

  • getFragmentManager() para obtener android.app.FragmentManager
  • getLoaderManager() para obtener android.app.LoaderManager

Si está utilizando un Fragment en un FragmentActivity (pre-panal), llame a:

  • getSupportFragmentManager() para obtener android.support.v4.app.FragmentManager.
  • getSupportLoaderManager() para obtener android.support.v4.app.LoaderManager

Así que, no hacer

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

O

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

También es útil saber que mientras que un fragment tiene que estar incrustado en un Activity no tiene que ser parte del diseño Activity. Se puede utilizar como un trabajador invisible para la actividad, sin interfaz de usuario propia.

 267
Author: Gunnar Karlsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-30 08:04:57

FragmentActivity es nuestra actividad clásica con soporte de fragmentos, nada más. Por lo tanto, FragmentActivity es necesario, cuando un Fragmento se adjunta a la Actividad.

Well Fragment es un buen componente que copia los comportamientos básicos de Activity, aún no es un componente de aplicación independiente como Activity y necesita estar adjunto a Activity para funcionar.

Mira aquí para más detalles

 14
Author: Gökhan Barış Aker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-15 21:56:56

Piense en FragmentActivity como una clase de actividad regular que puede soportar Fragmentos. Antes de panal, una clase de actividad no podía supoprt Fragmentos directamente, por lo que esto es necesario en las actividades que utilizan Fragmentos.

Si su distribución de destino es Panal y más allá, puede extenderse fuera de la actividad en su lugar.

También un fragmento debe considerarse como una 'subactividad'. No puede existir sin una actividad. Piensa siempre en un fragmento como una sub-actividad y deberías ser Bien. Así que la actividad sería el padre y el fragmento(s) el hijo tipo de relación simbólica.

 8
Author: j2emanue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-27 13:50:57

Una FragmentActivity es una actividad ad-hoc que contiene Fragment. En estas pocas palabras os he explicado uno de los principales cambios importantes que, con android 3.0(HoneyComb), android team ha insertado en el sdk de android.

Con este nuevo tipo de concepto, sus piezas de código y diseño se vuelven más flexibles y fáciles de mantener. Si buscas en Google hay muchos ejemplos.

 1
Author: Simone Casagranda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-15 22:09:38