web-dev-qa-db-fra.com

getActionBar renvoie la valeur null

L'appel de getActionBar renvoie null. Comme cela a souvent été rapporté, je me suis assuré d'inclure les solutions que d'autres ont utilisées: Mon minSdkVersion=11, j'ai une barre de titre et j'appelle getActionBar après setContentView. De plus, mon activité n'est pas une activité enfantine. 

setContentView(R.layout.main);

// experiment with the ActionBar 
ActionBar actionBar = getActionBar();
actionBar.hide();

L'appareil est un Samsung Galaxy Tab 10.1 sous Android 3.2

Merci d'avance pour vos idées ou suggestions!

25
user316117

Il semble que vous ayez besoin de demander d'avoir une barre d'action (! = Titlebar) via un thème ou via le code ci-dessous.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // The Action Bar is a window feature. The feature must be requested
    // before setting a content view. Normally this is set automatically
    // by your Activity's theme in your manifest. The provided system
    // theme Theme.WithActionBar enables this for you. Use it as you would
    // use Theme.NoTitleBar. You can add an Action Bar to your own themes
    // by adding the element <item name="Android:windowActionBar">true</item>
    // to your style definition.
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);

    setContentView(R.layout.main);

    // experiment with the ActionBar 
    ActionBar actionBar = getActionBar();
    actionBar.hide();
}

Code de [ ici ]

59
zapl

Il semble que plusieurs conditions soient nécessaires pour que cela fonctionne. Celui qui m'a laissé perplexe pendant longtemps était le suivant:

Assurez-vous que votre activité prolonge l'activité (PAS ActionBarActivity).

public class MagicActivity extends Activity

Assurez-vous que le manifeste de votre application a quelque chose comme

<application
    ...
    Android:theme="@Android:style/Theme.Holo" >

et assurez-vous que votre mise en page d'activité a

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    ....
    Android:theme="@Android:style/Theme.WithActionBar" >

-Marque

11
Mark Smith

J'ai semblé résoudre toutes mes erreurs en changeant getActionBar () avec getSupportActionBar () . J'avais essayé différents thèmes en ajoutant getWindow (). RequestFeature (Window.FEATURE_ACTION_BAR); , s'assurait que setContentView (view) était le premier et tous les autres éléments vus auparavant. 

10
ContinuousError

La barre d’action a besoin d’un thème ou d’une activité avec le titre de l’application. Assurez-vous que vous n'avez pas appelé votre application ou activité comme thème.NOTITLE.

<application
    Android:name="com.xxx.yyy.Application"
    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 this in your code
        Android:windowSoftInputMode="adjustResize|stateHidden" > 
8
Himanshu Virmani

J'essayais d'obtenir le ActionBar à partir d'un fragment situé dans un ActionBarActivity à l'aide de la bibliothèque de support. Je devais faire ceci:

ActionBarActivity actionBarActivity = (ActionBarActivity)getActivity();
ActionBar actionBar = actionBarActivity.getSupportActionBar();

Ma prochaine quête est de savoir comment fabriquer ce générique. Par exemple, ce code a l'air sale car il nécessite que mon fragment sache à la fois qu'il est utilisé par un ActionBarActivity et à l'aide de la bibliothèque de support. Je pense que ce devrait être une méthode qui vérifie d'abord getActivity().getActionBar() suivie du code ci-dessus, capturant l'exception ClassCastException si l'activité parent n'est pas une ActionBarActivity.

4
Harvey

Cela a résolu mon problème:

Android.support.v7.app.ActionBar ab = getSupportActionBar();
3
Jayakrishnan PM

Si vous créez un projet d'application pour API14 ou une version ultérieure, un dossier values-14 sera créé. Assurez-vous que ce dossier existe et qu'il contient un fichier styles.xml avec:

<style name="AppBaseTheme" parent="Android:Theme.Holo.Light.DarkActionBar">
        <!-- API 14 theme customizations can go here. -->
</style>

J'ai eu cette erreur parce que j'avais créé un nouveau projet et que je ne voulais pas de dossiers de valeurs supplémentaires dans mon projet. J'ai donc conservé le dossier de valeurs et supprimé les dossiers de valeurs Val-V11 et Valeurs-V14. Mais apparemment, le thème par défaut pour API14 et versions ultérieures nécessite un ActionBar dans sa balise XML parent si vous souhaitez utiliser le ActionBar. J'ai donc supposé que je pouvais le faire incorrectement! J'espère que ça aide quelqu'un. Votre plus susceptible de résoudre vos problèmes avec les réponses ci-dessus cependant.

2
Lou Morda

La vraie réponse devrait être une combinaison de @zapl et de @Himanshu Virmani

Pour le manifeste Android:

<application
    Android:name="com.xxx.yyy.Application"
    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 this in your code
        Android:windowSoftInputMode="adjustResize|stateHidden" > 

Pour l'activité:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // The Action Bar is a window feature. The feature must be requested
    // before setting a content view. Normally this is set automatically
    // by your Activity's theme in your manifest. The provided system
    // theme Theme.WithActionBar enables this for you. Use it as you would
    // use Theme.NoTitleBar. You can add an Action Bar to your own themes
    // by adding the element <item name="Android:windowActionBar">true</item>
    // to your style definition.
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    setContentView(R.layout.activity_main);
    // Hide the status bar for Android 4.1 and higher
    View decorView = getWindow().getDecorView();
    // Hide the status bar.
    int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
    decorView.setSystemUiVisibility(uiOptions);
    // Remember that you should never show the action bar if the
    // status bar is hidden, so hide that too if necessary.
    ActionBar actionBar = getActionBar();
    actionBar.hide();
}
1
nnhthuan

Changer l'ordre de la requête système:

@Override
protected void onCreate(Bundle savedInstanceState) {

    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);

    super.onCreate(savedInstanceState);    
    setContentView(R.layout.main);

    // experiment with the ActionBar 
    ActionBar actionBar = getActionBar();
    actionBar.hide();
}
1
Srikrishnan

il suffit de changer deux choses 1. 1) modifier le fichier manifeste.

2) Fichier fragmenté addAndroid:theme="@Android:style/Theme.WithActionBar "

1
Kamal Bunkar

Assurez-vous d'étendre ACTIONBARACTIVITY et non ACTIVITY Cela devrait résoudre votre problème

1
Sagar Devanga

Si vous développez une application qui cible SDK> = 14 et que vous étendez AppCompat pour prendre en charge le thème Matériau dans les versions précédentes. Lorsque vous souhaitez masquer les éléments de votre barre d’actions, comme le bouton Précédent, vous devez procéder comme suit: comme dans le thème Appsupport, getSupportAcionBar () renvoie la barre d'actions.

Voici le lien si vous voulez suivre depuis DevByte

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_detail);
    getSupportActionBar().setDisplayHomeAsUpEnabled(false);




}
0
antroid

peut-être que le style de votre activité est basé sur NoActionBar

0
perry