getActionBar() devuelve nulo

5 minutos de lectura

getActionBar() devuelve nulo
Christian Skogsberg

Tengo un problema extraño. Estoy haciendo una aplicación con targetsdk 13.

En el método onCreate de mi actividad principal llamo getActionBar() para configurar mi barra de acción. Esto funciona bien cuando se ejecuta en el emulador de Android 3.2, pero cuando se usa Android 3.0 y 3.1, el getActionBar() método devuelve nulo.

Encuentro esto extremadamente extraño, y no puedo ver ninguna razón por la que lo haría. ¿Es esto un error con los emuladores o hay algo que debo hacer para asegurarme de que mi aplicación tenga una barra de acción?

SOLUCIÓN:
Creo que he encontrado una solución para este problema. No estaba usando setContentView para establecer un diseño para la actividad. En cambio, estaba usando fragmentTransaction.add(android.R.id.content, mFragment, mTag) para agregar un fragmento a la actividad. Esto funcionó bien en 3.2, pero en versiones anteriores de nido de abeja, la barra de acción aparentemente no está configurada si no usa setContentView en el onCreate() método. Así que lo arreglé usando el setContentView() método en mi onCreate() y simplemente proporcionándole un diseño que contenía un FrameLayout vacío. Todavía puedo usar el fragmentTransaction.add(android.R.id.content, mFragment, mTag) método de la misma manera que antes.

No es la solución más bonita, pero funciona.

  • como señaló al responder otra publicación, necesita un tema Holo. ¿No suponga que especificó su tema holo en una carpeta res v13 solamente? Lo siento si eso suena demasiado obvio.

    – PJL

    29 de julio de 2011 a las 11:06

  • No, ese fue mi primer pensamiento también, pero ese no es el caso. Gracias por tu respuesta.

    – Christian Skogsberg

    29 de julio de 2011 a las 12:48

getActionBar() devuelve nulo
emir

Puedo usar getSupportActionBar() en lugar de getActionBar() método.

  • de todos los de aqui, esto lo hizo por mi!

    – msysmilu

    23 de enero de 2015 a las 0:25

  • gracias, estaba usando “android.support.v7.app.ActionBarActivity”, así que esto lo hizo por mí.

    – velval

    29/01/2015 a las 23:00

  • ¡Después de 2 horas de búsqueda! Cambiar a getSupportActionBar() y android.support.v7.app.ActionBarActivity finalmente me lo solucionó.

    – FacePalm

    26 de octubre de 2015 a las 5:35

  • Esta es la solución al problema.

    – zigimanto

    10 de junio de 2016 a las 9:48

getActionBar() devuelve nulo
Jorgesys

Si está utilizando la biblioteca de soporte

import android.support.v7.app.ActionBarActivity;

public class MainActivity extends ActionBarActivity {

utilizar getSupportActionBar() en lugar de getActionBar()

* Actualizar:

La clase ActionBarActivity ahora está en desuso:

import android.support.v7.app.ActionBarActivity;

Recomiendo usar:

import android.support.v7.app.AppCompatActivity

  • dentro de android.support.v7.app: ActionBarActivity uso obsoleto android.support.v7.app.AppCompatActivity en lugar de.

    – A. Petrov

    7 julio 2015 a las 10:59


  1. si estás usando android.support.v7.app.AppCompatActivity

    clase pública HomeActivity extiende AppCompatActivity {

Entonces deberías estar usando android.support.v7.app.ActionBar

  ActionBar ab = getSupportActionBar();
  1. Si estás usando android.support.v4.app.FragmentActivity

    clase pública HomeActivity extiende FragmentActivity {

entonces deberías estar usando android.app.ActionBar

    ActionBar ab = getActionBar();
  1. Si estás usando android.support.v7.app.ActionBarActivity

    clase pública HomeActivity extiende ActionBarActivity {

deberías estar usando android.support.v7.app.ActionBar

   ActionBar ab = getSupportActionBar();

  • ¡Gran respuesta, aborda la confusión!

    – sud007

    26 de julio de 2016 a las 13:18

Debe definir el tipo de ventana como barra de acción antes de que la actividad represente su vista.

utilizar

requestWindowFeature(Window.FEATURE_ACTION_BAR);

antes de llamar al método setContentView().

Me enfrenté al problema anterior donde getActionBar() método devuelve nulo. estaba llamando al getActionBar() después de configurar el setContentView() y todavía está regresando un null.

Resolví el problema configurando la versión min-sdk en el archivo de manifiesto de Android que faltaba inicialmente.
<uses-sdk android:minSdkVersion="11" />

  • ¡Esto me ahorró mucho tiempo! Cualquiera que use la aplicación de ejemplo Bluetooth Chat en el SDK de Android debe usar esta corrección. El manifiesto de la aplicación no incluye el espacio de nombres “android:” en su etiqueta minSdkVersion, por lo que no se registra. Agregar el espacio de nombres corrige un error con la barra de acción que no se encuentra. ¡Descuidado, Google!

    – Nick

    29 de noviembre de 2012 a las 18:58

  • En realidad, es posible que solo necesite especificar targetSdkVersion. Puede ejecutar con una minSdkVersion inferior si está utilizando la biblioteca de compatibilidad, pero targetSdkVersion determina el comportamiento.

    – William

    23 de diciembre de 2013 a las 3:41

  • ¡¡Genial!! Esto es lo que estaba buscando.

    – chicoveloz

    19 de febrero de 2014 a las 5:08

  • resolvió mi problema gracias

    – Majid

    27 junio 2015 a las 20:17

ActionBar necesita el tema de la aplicación o actividad para tener un título de aplicación. Asegúrate de no haber diseñado tu aplicación o actividad como Theme.NOTITLE.

<application
    android:name="com.xxx.yyy"
    android:debuggable="false"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code


<activity
        android:name="com.xxx.yyy.Activity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:theme="@style/Theme.NoTitle"  // remove this line if you have in your code
        android:windowSoftInputMode="adjustResize|stateHidden" > 

  • ¡Esto me ahorró mucho tiempo! Cualquiera que use la aplicación de ejemplo Bluetooth Chat en el SDK de Android debe usar esta corrección. El manifiesto de la aplicación no incluye el espacio de nombres “android:” en su etiqueta minSdkVersion, por lo que no se registra. Agregar el espacio de nombres corrige un error con la barra de acción que no se encuentra. ¡Descuidado, Google!

    – Nick

    29 de noviembre de 2012 a las 18:58

  • En realidad, es posible que solo necesite especificar targetSdkVersion. Puede ejecutar con una minSdkVersion inferior si está utilizando la biblioteca de compatibilidad, pero targetSdkVersion determina el comportamiento.

    – William

    23 de diciembre de 2013 a las 3:41

  • ¡¡Genial!! Esto es lo que estaba buscando.

    – chicoveloz

    19 de febrero de 2014 a las 5:08

  • resolvió mi problema gracias

    – Majid

    27 junio 2015 a las 20:17

getActionBar() devuelve nulo
cris

import android.support.v7.app.AppCompatActivity;

luego

extends AppCompatActivity

entonces usa

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

  • soluciona mi problema en el ejemplo del cajón de navegación de Google.

    – Weishi Z.

    18/10/2016 a las 18:29

  • Buena solución, sin embargo, para aquellos que la implementarán, lo más probable es que obtengan errores basados ​​en la compatibilidad. Si lo hace, asegúrese de verificar sus importaciones sa android.support.v4.app.FragmentTransaction en lugar de solo android.app.FragmentTransaction y android.support.v7.app.ActionBar en lugar de android.app.ActionBar

    – Serguéi Emelianov

    11/09/2017 a las 16:22


¿Ha sido útil esta solución?