mainactivity getsupportactionbar error android android-fragments android-activity android-actionbaractivity appcompatactivity

android - getsupportactionbar - extends appcompatactivity error



Activity, AppCompatActivity, FragmentActivity y ActionBarActivity: ¿Cuándo usar cuál? (9)

Pensé que la actividad estaba en desuso

No.

Entonces, para el nivel 22 de API (con un soporte mínimo para el nivel 15 o 16 de API), ¿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?

Activity es la línea de base. Cada actividad hereda de la Activity , directa o indirectamente.

FragmentActivity se usa con el backport de fragmentos que se encuentran en las bibliotecas support-v4 y support-v13 . La implementación nativa de fragmentos se agregó en el nivel 11 de API, que es inferior a los valores minSdkVersion propuestos. La única razón por la que necesitaría considerar FragmentActivity específicamente es si desea usar fragmentos anidados (un fragmento que contiene otro fragmento), ya que eso no era compatible con fragmentos nativos hasta el Nivel 17 de API.

AppCompatActivity es de la biblioteca appcompat-v7 . Principalmente, esto ofrece un backport de la barra de acción. Dado que la barra de acción nativa se agregó en el Nivel de API 11, no necesita AppCompatActivity para eso. Sin embargo, las versiones actuales de appcompat-v7 también agregan un backport limitado de la estética de Material Design, en términos de la barra de acción y varios widgets. Hay ventajas y desventajas de usar appcompat-v7 , mucho más allá del alcance de esta respuesta específica de Stack Overflow.

ActionBarActivity es el antiguo nombre de la actividad base de appcompat-v7 . Por varias razones, querían cambiar el nombre. A menos que alguna biblioteca de terceros que esté utilizando insista en una ActionBarActivity , debería preferir AppCompatActivity sobre ActionBarActivity .

Entonces, dada su minSdkVersion en el rango de 15-16:

  • Si desea el aspecto de diseño de material con AppCompatActivity , use AppCompatActivity

  • Si no, pero desea fragmentos anidados, use FragmentActivity

  • Si no, use Activity

Simplemente agregando desde el comentario como nota: AppCompatActivity extiende FragmentActivity , por lo que cualquiera que necesite usar las funciones de FragmentActivity puede usar AppCompatActivity .

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 componentes de UIC para niveles de API específicos. Estoy leyendo BigNerdRanch para Android (el libro tiene aproximadamente 2 años) y sugieren que use Activity para alojar mis FragmentActivities . Sin embargo, pensé que la Activity estaba en desuso.

Entonces, para el nivel 22 de API (con un soporte mínimo para el nivel 15 o 16 de API), ¿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?


2019: use AppCompatActivity

En el momento de escribir esto (verifique el enlace para confirmar que todavía es cierto), la Documentación de Android recomienda usar AppCompatActivity si está usando una barra de aplicaciones.

Este es el racional dado:

A partir de Android 3.0 (API nivel 11), todas las actividades que usan el tema predeterminado tienen una barra de acciones como barra de aplicaciones. Sin embargo, las funciones de la barra de aplicaciones se han agregado gradualmente a la barra de acción nativa en varios lanzamientos de Android. Como resultado, la barra de acción nativa se comporta de manera diferente dependiendo de qué versión del sistema Android 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, debe utilizar la clase de barra de herramientas de la biblioteca de soporte para implementar las barras de aplicaciones de sus actividades. El uso de la barra de herramientas de la biblioteca de soporte ayuda a garantizar que su aplicación tenga un comportamiento constante en la más amplia gama de dispositivos. Por ejemplo, el widget Toolbar proporciona una experiencia de diseño de material en dispositivos que ejecutan Android 2.1 (API nivel 7) o posterior, pero la barra de acción nativa no admite diseño de material a menos que el dispositivo ejecute Android 5.0 (API nivel 21) o posterior.

Las instrucciones generales para agregar una barra de herramientas son

  1. Agregue la biblioteca de soporte v7 appcompat
  2. Haga que todas sus actividades extiendan AppCompatActivity
  3. En el manifiesto declara que quieres NoActionBar .
  4. Agregue una ToolBar de ToolBar al diseño xml de cada actividad.
  5. Obtenga la onCreate ToolBar en onCreate cada actividad.

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


Aquí hay mucha confusión, especialmente si lees fuentes obsoletas.

El básico es Activity , que puede mostrar Fragmentos. Puede usar esta combinación si está en la versión de Android> 4.

Sin embargo, también hay una biblioteca de soporte que abarca las otras clases que mencionó: FragmentActivity , ActionBarActivity y AppCompat . Originalmente se usaban para admitir fragmentos en versiones de Android <4, pero en realidad también se usan para respaldar la funcionalidad de versiones más recientes de Android (diseño de materiales, por ejemplo).

El último es AppCompat , los otros 2 son más antiguos. La estrategia que uso es usar siempre AppCompat , para que la aplicación esté lista en caso de backports de futuras versiones de Android.


Dado que es probable que el nombre cambie en futuras versiones de Android (actualmente, la última es AppCompatActivity pero probablemente cambiará en algún momento), creo que es bueno tener una Activity clase que amplíe AppCompatActivity y luego todas sus actividades se extiendan a partir de eso uno. Si mañana cambian el nombre a AppCompatActivity2 por ejemplo, tendrá que cambiarlo en un solo lugar.


Para un nivel mínimo de API de 15, querrás usar AppCompatActivity . Entonces, por ejemplo, su MainActivity se vería así:

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 solo 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 este AppCompat como su Activity principal, que luego se puede usar 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éalo para obtener información general sobre cómo funciona Android, pero no espere que las clases específicas que usan estén actualizadas.


Si habla de Activity , AppcompactActivity , ActionBarActivity , etc.

Necesitamos hablar sobre las clases Base que están extendiendo. Primero tenemos que entender la jerarquía de las superclases.

Todas las cosas se inician desde Context, que es una superclase para todas estas clases.

El contexto es una clase abstracta cuya implementación es proporcionada por el sistema Android. Permite el acceso a recursos y clases específicos de la aplicación, así como llamadas ascendentes para operaciones a nivel de la aplicación, como actividades de lanzamiento, difusión y recepción de intenciones, etc.

Context es seguido o extendido por ContextWrapper

ContextWrapper es una clase que extiende la clase Context que simplemente delega todas sus llamadas a otro Context. Se puede subclasificar para modificar el comportamiento sin cambiar el contexto original.

Ahora llegamos a la Activity

La actividad es una clase que extiende ContextThemeWrapper que es una cosa única y enfocada que el usuario puede hacer. Casi todas las actividades interactúan con el usuario, por lo que la clase Actividad se encarga de crear una ventana para usted.

Las clases a continuación están restringidas para extenderse, pero su descendente las extiende internamente y brindan soporte para Api específicas

SupportActivity es una clase que extiende la actividad que es una clase base para componer juntas la funcionalidad de compatibilidad

BaseFragmentActivityApi14 es una clase que extiende SupportActivity que es una clase Base. Es una clase restringida pero BaseFragmentActivityApi16 lo extiende para admitir la funcionalidad de V14.

BaseFragmentActivityApi16 es una clase que extiende BaseFragmentActivityApi14 que es una clase Base para que {@code FragmentActivity } pueda usar las API v16 . Pero también es una clase restringida, pero FragmentActivity la extiende para admitir la funcionalidad de V16.

ahora FragmentActivty

FragmentActivity es una clase que extiende BaseFragmentActivityApi16 y que quiere usar las API de Fragment and Loader basadas en soporte.

Al usar esta clase en lugar de la compatibilidad con el cargador y los fragmentos integrados de la nueva plataforma, debe usar los getSupportFragmentManager() y getSupportLoaderManager() respectivamente para acceder a esas funciones.

ActionBarActivity es parte de la Biblioteca de soporte. Las bibliotecas de soporte se utilizan para ofrecer nuevas funciones en plataformas más antiguas. Por ejemplo, ActionBar se introdujo en API 11 y es parte de la Actividad de forma predeterminada (dependiendo del tema en realidad). Por el contrario, no hay ActionBar en las plataformas más antiguas. Entonces, la biblioteca de soporte agrega una clase secundaria de Actividad ( ActionBarActivity ) que proporciona la funcionalidad y la interfaz de usuario de ActionBar

En 2015, ActionBarActivity está en desuso en la revisión 22.1.0 de la Biblioteca de soporte. AppCompatActivity debería usarse en su lugar.

AppcompactActivity es una clase que extiende FragmentActivity que es la clase Base para actividades que utilizan las funciones de la barra de acción de la biblioteca de soporte.

Puede agregar una Barra de acciones a su actividad cuando se ejecuta en el nivel de API 7 o superior extendiendo esta clase para su actividad y configurando el tema de la actividad en Theme.AppCompat o un tema similar

Me refiero a estos dos one , two


Activity clase de Activity es la clase básica. (El original) Es compatible con la gestión de fragmentos (desde API 11). Ya no se recomienda su uso puro porque sus especializaciones son mucho mejores.

ActionBarActivity fue en un momento el reemplazo de la clase Activity porque facilitó el manejo de ActionBar en una aplicación.

AppCompatActivity es el nuevo camino a seguir porque ya no se recomienda ActionBar y en su lugar debería usar Toolbar (que actualmente es el reemplazo de ActionBar). AppCompatActivity hereda de FragmentActivity, por lo que si necesita manejar Fragmentos, puede hacerlo (a través del Administrador de Fragmentos). AppCompatActivity es para CUALQUIER API, no solo para mayores de 16 años (¿quién dijo eso?). Puede usarlo agregando la compile ''com.android.support:appcompat-v7:24:2.0'' en su archivo Gradle. Lo uso en API 10 y funciona perfecto.


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

Activity <- FragmentActivity <- AppCompatActivity <- ActionBarActivity

''<-'' significa herencia aquí. La reference dice que ActionBarActivity está en desuso, use AppCompatActivity en AppCompatActivity lugar.

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

  • Activity es la básica.
  • Basado en la Activity , FragmentActivity proporciona la capacidad de usar Fragment .
  • Basado en FragmentActivity , AppCompatActivity proporciona características a ActionBar .

AppCompatActivity extiende FragmentActivity extiende BaseFragmentActivityApi16 extiende BaseFragmentActivityApi14 extiende SupportActivity extiende Actividad

Entonces, Activity es más rápido que todos y AppCompatActivity es lo mejor de todo.