¿Cuál es la diferencia entre Fragment y FragmentActivity?

Respuestas:

280

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

  • su propio ciclo de vida
  • recibe sus propios eventos de entrada
  • se puede agregar o quitar mientras se Activityestá ejecutando.

A Fragmentsiempre debe estar incrustado en un Activity.

Fragmentsno son parte de la API antes de HoneyComb (3.0). Si desea usar Fragmentsen una aplicación dirigida a una versión de plataforma anterior a HoneyComb, debe agregar el Paquete de soporte a su proyecto y usar el FragmentActivitypara mantener su Fragments. La FragmentActivityclase tiene una API para tratar Fragments, mientras que la Activityclase, antes de HoneyComb, no.

Si su proyecto está dirigido solo a HoneyComb o más reciente, debe usarlo Activityy no FragmentActivitymantenerlo Fragments.

Algunos detalles:

Usar android.app.Fragmentcon Activity. Usar android.support.v4.app.Fragmentcon FragmentActivity. No agregue el paquete de soporte Fragmenta unActivity ya que provocará una excepción.

Algo a tener en cuenta: FragmentManagery LoaderManagertener versiones de soporte separadas para FragmentActivity:

Si está utilizando un Fragmenten un Activity(HoneyComb y superior), llame

  • getFragmentManager() Llegar android.app.FragmentManager
  • getLoaderManager() Llegar android.app.LoaderManager

Si está utilizando un Fragmenten un FragmentActivity(pre-HoneyComb), llame al:

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

entonces no hagas

//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, si bien un fragmento debe incrustarse en un Activity, no tiene que ser parte del Activitydiseño. Se puede utilizar como un trabajador invisible para la actividad, sin interfaz de usuario propia.

Gunnar Karlsson
fuente
66
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.
uzay95
1
@ uzay95 gracias por señalar esto. Agregué una sección al final para mencionarlo.
Gunnar Karlsson
@GunnarKarlsson ¿Vamos a agregar fragmento a fragmentoActividad?
Dhasneem
2
@Dhasneem Agrega un Fragment a una FragmentActivity si desea que su aplicación funcione en versiones de Android inferiores a la 3.0. De lo contrario, agrega un Fragmento a una Actividad.
Gunnar Karlsson,
2
¡Gracias! Esto resuelve mi problema! Ahora sé por qué mi aplicación (escrita con Activity) siempre falla en onCreate después de agregar el botón de inicio de sesión de Facebook (usan android.support.v4.app.Fragment en su ejemplo). Por supuesto, también hay otra razón para el accidente. Pero su respuesta es la pieza final para unirlos.
Chlind
14

FragmentActivity es nuestra actividad clásica con soporte de fragmentos, nada más. Por lo tanto, se necesita FragmentActivity, cuando se unirá un Fragment a Activity

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

Mira aquí para más detalles

Gökhan Barış Aker
fuente
1
Por cierto, respuesta desactualizada, que solo se aplica a las aplicaciones que desean trabajar en dispositivos anteriores a la API 11.
ToolmakerSteve
@ToolmakerSteve, ¿puede proporcionar más detalles? Si es posible, ¿puede editar la respuesta con la versión actualizada?
Gökhan Barış Aker
8

Piense en FragmentActivity como una clase de actividad normal que puede admitir Fragments. Antes del nido de abeja, una clase de actividad no podía incluir Fragmentos directamente, por lo que esto es necesario en actividades que usan Fragmentos.

Si su distribución objetivo es Honeycomb y más allá, puede extenderla fuera de la Actividad.

También un fragmento debe considerarse como una 'sub-actividad'. No puede existir sin una actividad. Piensa siempre en un fragmento como una sub-actividad y deberías ser bueno. Entonces, la actividad sería el padre y el fragmento (s) el niño de una relación simbólica.

j2emanue
fuente
1

FragmentActivity es una actividad ad-hoc que contiene Fragment. En estas pocas palabras, he explicado uno de los principales cambios importantes que, con Android 3.0 (HoneyComb), el equipo de Android 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 mantenibles. Si busca en Google, hay muchos ejemplos.

Simone Casagranda
fuente