Actividad, AppCompatActivity, FragmentActivity y ActionBarActivity: ¿Cuándo usar cuál?

Resuelto Jameson asked hace 54 años • 7 respuestas

Vengo de iOS, donde es fácil y simplemente usas un UIViewController. Sin embargo, en Android las cosas parecen mucho más complicadas, con ciertos UIComponents para niveles API específicos. Estoy leyendo BigNerdRanch para Android (el libro tiene aproximadamente 2 años) y me sugieren que lo use Activitypara alojar mi archivo FragmentActivities. Sin embargo, pensé Activityque estaba en desuso.

Entonces, para el nivel API 22 (con un soporte mínimo para el nivel API 15 o 16), ¿qué debo usar exactamente para alojar los componentes y para los componentes mismos? ¿Hay usos para todos estos, o debería usar uno o dos casi exclusivamente?

Jameson avatar Jan 01 '70 08:01 Jameson
Aceptado

Pensé que la actividad estaba obsoleta.

No.

Entonces, para el nivel API 22 (con un soporte mínimo para el nivel API 15 o 16), ¿qué debo usar exactamente para alojar los componentes y para los componentes mismos? ¿Hay usos para todos estos, o debería usar uno o dos casi exclusivamente?

Activityes la línea de base. Toda actividad hereda de Activity, directa o indirectamente.

FragmentActivityse utiliza con el backport de fragmentos que se encuentran en las bibliotecas support-v4y support-v13. La implementación nativa de fragmentos se agregó en el nivel 11 de API, que es inferior a los valores propuestos minSdkVersion. La única razón por la que debería considerarlo FragmentActivityespecíficamente es si desea utilizar fragmentos anidados (un fragmento que contiene otro fragmento), ya que eso no era compatible con los fragmentos nativos hasta el nivel 17 de API.

AppCompatActivityes de la appcompat-v7biblioteca. Principalmente, esto ofrece un backport de la barra de acciones. Dado que la barra de acciones nativa se agregó en el nivel 11 de API, no es necesario AppCompatActivity. Sin embargo, las versiones actuales appcompat-v7también agregan un backport limitado de la estética de Material Design, en términos de la barra de acciones y varios widgets. Existen ventajas y desventajas de usar appcompat-v7, que van mucho más allá del alcance de esta respuesta específica de Stack Overflow.

ActionBarActivityes el nombre antiguo de la actividad base de appcompat-v7. Por diversos motivos quisieron cambiar el nombre. A menos que alguna biblioteca de terceros que esté utilizando insista en un archivo ActionBarActivity, debería preferirlo AppCompatActivitya uno ActionBarActivity.

Entonces, dado que estás minSdkVersionen el rango de 15 a 16 años:

  • Si desea el aspecto de Material Design respaldado, useAppCompatActivity

  • Si no, pero quieres fragmentos anidados, usaFragmentActivity

  • Si no, usaActivity

Simplemente agrego desde el comentario como nota: AppCompatActivityse extiende FragmentActivity, para que cualquiera que necesite usar funciones de FragmentActivitypueda usarlas AppCompatActivity.

CommonsWare avatar Jul 08 '2015 15:07 CommonsWare

Activityes la clase base de todas las demás actividades, no creo que quede obsoleta. La relación entre ellos es:

Activity<- FragmentActivity<- AppCompatActivity<-ActionBarActivity

'<-' significa herencia aquí. La referencia dicha ActionBarActivityestá en desuso, úsela AppCompatActivityen su lugar.

Básicamente, usar AppCompatActivityes siempre la elección correcta. Las diferencias entre ellos son:

  • Activityes el básico.
  • Basado en Activity, FragmentActivityproporciona la posibilidad de utilizar Fragment.
  • Basado en FragmentActivity, AppCompatActivityproporciona funciones para ActionBar.
Ted Yu avatar Jul 08 '2015 15:07 Ted Yu

2019: usoAppCompatActivity

En el momento de escribir este artículo (consulte el enlace para confirmar que sigue siendo cierto), la documentación de Android recomienda su uso AppCompatActivitysi está utilizando una barra de aplicaciones.

Este es el dado racional:

A partir de Android 3.0 (nivel de API 11), todas las actividades que utilizan el tema predeterminado tienen una ActionBar como barra de aplicaciones. Sin embargo, las funciones de la barra de aplicaciones se han agregado gradualmente a la ActionBar nativa en varias versiones de Android. Como resultado, la ActionBar nativa se comporta de manera diferente según la versión del sistema Android que pueda estar usando un dispositivo. Por el contrario, las funciones más recientes se agregan a la versión de la barra de herramientas de la biblioteca de soporte y están disponibles en cualquier dispositivo que pueda usar la biblioteca de soporte.

Por este motivo, debes utilizar la clase Toolbar de la biblioteca de soporte para implementar las barras de aplicaciones de tus actividades. El uso de la barra de herramientas de la biblioteca de soporte ayuda a garantizar que su aplicación tenga un comportamiento consistente en la más amplia gama de dispositivos. Por ejemplo, el widget de la barra de herramientas proporciona una experiencia de diseño de materiales en dispositivos que ejecutan Android 2.1 (nivel de API 7) o posterior, pero la barra de acciones nativa no admite diseño de materiales a menos que el dispositivo ejecute Android 5.0 (nivel de API 21) o posterior.

Las instrucciones generales para agregar una barra de herramientas son

  1. Agregue la biblioteca de soporte de appcompat v7
  2. Haz que todas tus actividades se extiendanAppCompatActivity
  3. En el Manifiesto declara que quieres NoActionBar.
  4. Agregue un ToolBaral diseño xml de cada actividad.
  5. Obtenga el ToolBaren cada actividad onCreate.

Consulte las instrucciones de la documentación para obtener más detalles. Son bastante claros y útiles.

Suragch avatar Sep 03 '2016 00:09 Suragch

Para un nivel mínimo de API de 15, querrás usar AppCompatActivity. Así, por ejemplo, tu MainActivityaspecto sería este:

public class MainActivity extends AppCompatActivity {
    ....
    ....
}

Para usar AppCompatActivity, asegúrese de tener descargada la Biblioteca de soporte de Google (puede verificar esto en Herramientas -> Android -> Administrador de SDK). Luego simplemente incluya la dependencia de gradle en el archivo gradle.build de su aplicación:

compile 'com.android.support:appcompat-v7:22:2.0'

Puede usar esto AppCompatcomo su archivo principal Activity, que luego puede usarse para iniciar Fragmentos u otras actividades (esto depende del tipo de aplicación que esté creando).

El libro BigNerdRanch es un buen recurso, pero sí, está desactualizado. Léelo para obtener información general sobre cómo funciona Android, pero no esperes que las clases específicas que utilizan estén actualizadas.

adao7000 avatar Jul 08 '2015 15:07 adao7000