Mi pregunta es aparte de las diferencias de herencia obvias, ¿cuáles son las principales diferencias entre Fragment
y FragmentActivity
? ¿Para qué escenarios se adapta mejor cada clase? Estoy tratando de entender por qué existen ambas clases ...
Mi pregunta es aparte de las diferencias de herencia obvias, ¿cuáles son las principales diferencias entre Fragment
y FragmentActivity
? ¿Para qué escenarios se adapta mejor cada clase? Estoy tratando de entender por qué existen ambas clases ...
Respuestas:
A Fragment
es una sección de un Activity
, que tiene:
Activity
está ejecutando.A Fragment
siempre debe estar incrustado en un Activity
.
Fragments
no son parte de la API antes de HoneyComb (3.0). Si desea usar 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 el FragmentActivity
para mantener su Fragments
. La FragmentActivity
clase tiene una API para tratar Fragments
, mientras que la Activity
clase, antes de HoneyComb, no.
Si su proyecto está dirigido solo a HoneyComb o más reciente, debe usarlo Activity
y no FragmentActivity
mantenerlo 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 unActivity
ya que provocará una excepción.
Algo a tener en cuenta: FragmentManager
y LoaderManager
tener versiones de soporte separadas para FragmentActivity:
Si está utilizando un Fragment
en un Activity
(HoneyComb y superior), llame
getFragmentManager()
Llegar android.app.FragmentManager
getLoaderManager()
Llegar android.app.LoaderManager
Si está utilizando un Fragment
en 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 Activity
diseño. Se puede utilizar como un trabajador invisible para la actividad, sin interfaz de usuario propia.
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
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.
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.