187 votes

getActionBar() renvoie la valeur null

J'ai un étrange problème. Je fais une application avec targetsdk 13.

Dans mon activité principale est la méthode onCreate j'appelle getActionBar() pour l'installation de mon actionbar. Cela fonctionne bien lors de l'exécution sur l'Android 3.2 émulateur, mais lors de l'utilisation d'Android 3.0 et 3.1 getActionBar() méthode renvoie null.

Je trouve cela très étrange, et je ne vois aucune raison pourquoi il le ferait. Est-ce un bug avec les émulateurs ou est-il quelque chose que je dois faire, afin de s'assurer que ma demande a une actionbar?

SOLUTION: Je crois que j'ai trouvé une solution pour ce problème. Je n'étais pas à l'aide de la setContentView pour définir une mise en page pour l'activité. Au lieu de cela j'ai été en utilisant fragmentTransaction.add(android.R.id.content, mFragment, mTag) ajouter un fragment de l'activité. Cela a bien fonctionné en 3.2, mais au plus tôt en nid d'abeille versions de la barre d'action est apparemment pas si vous n'utilisez pas le setContentView dans l' onCreate()méthode. Donc, je fixe à l'aide de l' setContentView() méthode dans mon onCreate() méthode et de la simple fourniture avec une mise en page qui contenait un vide FrameLayout. Je peux encore utiliser l' fragmentTransaction.add(android.R.id.content, mFragment, mTag) méthode de la même manière qu'avant.

Ce n'est pas la plus belle correction, mais il fonctionne.

84voto

Pavel Lahoda Points 636

J'ai trouvé, c'est juste une moitié de l'équation. Vous avez également besoin de l'Activité de la fenêtre pour avoir le titre visible. J'ai écrit un blog post sur ce sujet.

35voto

kaushal trivedi Points 1288

Vous devez définir le type de fenêtre que actionbar avant de rendre son avis.

utilisation

requestWindowFeature(Window.FEATURE_ACTION_BAR);

avant d'appeler setContentView() la méthode.

31voto

Rajendra Points 935

J'ai affronté le problème ci-dessus, où l' getActionBar() méthode renvoie null. J'ai été l'appel de la getActionBar() après la mise à l' setContentView() , et encore de son retour d'un null.

J'ai résolu le problème en définissant le min-version du sdk Android fichier de Manifeste qui manquait au départ. <uses-sdk android:minSdkVersion="11" />

28voto

Himanshu Virmani Points 990

ActionBar besoins de l'application ou de l'activité de Thème un titre d'application. Assurez-vous que vous n'avez pas de style de votre application ou de l'activité en tant que Thème.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" > 

18voto

SK9 Points 9683

Cette réponse est tardive mais qui peut être utile à toute personne qui arrive à partir de Google: Vous pourriez bien avoir besoin de déclarer

<item name="android:windowActionBar">true</item>

dans votre styles.xml. Il semble false peut être la valeur par défaut. Vous avez également besoin d'être sur l'API de 11 ou plus.

Plus de détails peuvent être trouvés dans la documentation ici. Plus précisément, citation:

Astuce: Si vous avez une activité personnalisée thème dans lequel vous souhaitez supprimer la barre d'action, jeu android:windowActionBar propriété de style à faux. Toutefois, si vous supprimez la barre d'action à l'aide d'un thème, puis la la fenêtre ne sera pas permettre à la barre d'action, à tous, de sorte que vous ne pouvez pas l'ajouter plus tard-l'appel de getActionBar() renvoie la valeur null.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X