6
votes

Android Actionbar Toujours null

J'ai une activité avec un tiroir de navigation qui revient entre des fragments. Rien de spécial.

Cependant, ce que je veux, c'est la barre d'action à apparaître en haut de l'activité. Le problème est que je continue à obtenir un nullpointerexception code> pour la barre d'action code>. P>

J'ai essayé des réponses des pages suivantes: p>

barvetage retourne null p>

GetActionBar () Retourne NULL (AppCompat-V7 21) P>

Aucun de ceux-ci n'a travaillé donc je pensais que je pensais «D Soumettez ma propre question avec mon propre code. P>

MainAlacit.java H2> XXX PRE>

Activity_Main.xml H2>
11-08 19:17:38.618: E/AndroidRuntime(6347): FATAL EXCEPTION: main
11-08 19:17:38.618: E/AndroidRuntime(6347): Process: com.jampez.smalltalk, PID: 6347
11-08 19:17:38.618: E/AndroidRuntime(6347): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jampez.smalltalk/com.jampez.smalltalk.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference
11-08 19:17:38.618: E/AndroidRuntime(6347):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at android.app.ActivityThread.access$900(ActivityThread.java:172)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at android.os.Handler.dispatchMessage(Handler.java:102)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at android.os.Looper.loop(Looper.java:145)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at android.app.ActivityThread.main(ActivityThread.java:5832)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at java.lang.reflect.Method.invoke(Native Method)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at java.lang.reflect.Method.invoke(Method.java:372)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
11-08 19:17:38.618: E/AndroidRuntime(6347): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference
11-08 19:17:38.618: E/AndroidRuntime(6347):     at com.jampez.smalltalk.MainActivity.onCreate(MainActivity.java:37)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at android.app.Activity.performCreate(Activity.java:6221)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
11-08 19:17:38.618: E/AndroidRuntime(6347):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)
11-08 19:17:38.618: E/AndroidRuntime(6347):     ... 10 more


11 commentaires

Parce que vous prolongez de fragmentationactivité , au lieu de actebaractivité


J'ai prolongé par ActionBarAcity, mais en plus d'être obsolète, je reçois la sortie LogCat suivante imgur.com/7IMOS6C


J'ai lu que l'appelcompaticotivité a remplacé une action d'action mais qui produit une réponse erronée similaire


ActionBarAcity étend la fragmentactivité à ses propres


AppCompaticitity doit également être associé à GetUpPoppbarbar () d'ailleurs, pas gettagebar () .


@PPartisan merci mais à l'aide de GetsUppPortageBar () avec l'appelcompaticotivité produit la même erreur


Avez-vous essayé d'utiliser un AppCompat thème parent dans votre styles.xml ? C'est à dire. theme.appcompat.light.darkactionbar , en conjonction avec AppCompatiactivité et getupportAdBar () ?


@Ppartisan je viens d'essayer cette suggestion mais je reçois toujours le même genre d'erreur


Essayez de paramétrer non seulement un thème AppCompat, mais également un parent AppCompat à la barre d'action, comme parent = "@ style / widget.appcompat.light.actebar.solid.invers e" combiner cela avec GETUPPORTARETBAR , assurez-vous simplement d'utiliser SUPPORTSUFF partout une fois que vous utilisez AppCompat.


Essayez également d'appeler la barre d'action comme ceci: ((appcCompativitity) ceci) .GetsUpPortageBar (). Settitle (""); Pour être extrêmement sûr que vous obtenez la bonne activité. Dans votre fragment remplacer ceci avec getactivité () .


Dupliqué possible de Stackoverflow.com / Questions / 33170217 / ...


4 Réponses :


0
votes

Si vous ne recevez pas de barre d'action, comme Visualy, essayez de réécrire votre activité afin que vous puissiez utiliser l'appelcompaticotivité. Ce thread suggère d'utiliser une action d'action au lieu de la fragmentation. Étant donné que la baractivité d'action est obsolète, l'appelcompatiactivité devrait fonctionner simplement bien .

pour le numéro NullPoinger:

Toujours être cohérent avec ce que vous utilisez. Si vous décidez d'utiliser AppCompat, assurez-vous d'extension de l'appelcompaticotivité. Vérifiez toutes les importations - Vous pouvez utiliser le fragment normal au lieu de la version AppCompat.
Vérifiez vos styles et assurez-vous d'utiliser les parents AppCompat au lieu de Holo. Cela inclut également votre barre d'action. Au lieu de widget.holo.light.actionbar Utilisez parent = "@ style / widget.appcompat.light.actionbar" . Appelez toujours getupportParbar au lieu de gettagebar () . Parfois, il pourrait même être nécessaire de voter l'activité que vous obtenez avec getactivité () dans un fragment à l'appelcompativement pour être sûr que vous obtenez le bon: ((appcCompativitity) getactivité ()) .GetsUpportagerBar (). Settitle (""); .


2 commentaires

Salut, merci pour la réponse. Malheureusement, votre conseil n'a pas aidé. J'ai cependant réussi à afficher la barre d'action en utilisant une méthode légèrement différente. Cependant, il se bloque maintenant lorsque j'utilise la fonction Actionbardrawertoggle: /


Il est 2021, les choses ont changé depuis 2015. En l'absence d'exemples au contraire, je suis obligé d'utiliser AppCompativitity si je veux la barre d'action .



7
votes

* Tout d'abord, ceci incluez cette dépendance dans votre fichier de gradle xxx pré>

* Vous devez étendre votre activité à AppCompactivitactivité forte> et commencer à utiliser la barre d'outils forte> > Au lieu de action d'action forte>. p>

* C'est la manière dont vous utilisez la barre d'outils dans votre MainActivity fort> p> xxx pré> p > * Ceci est comment ajouter une barre d'outils dans votre Activity_Main.xml Strong> P>

((AppCompatActivity)getActivity()).getSupportActionBar().setTitle(R.string.home);


0 commentaires

0
votes

OK, donc aucune des réponses postées ne m'a donné beaucoup de succès. J'ai cependant réussi à faire afficher la barre d'action mais avec une fonctionnalité quelque peu limitée.

La première chose que j'ai faite était de remplacer la bibliothèque appelccompat_v7 avec android-support-v7-appelccompat . Cela me permet d'appeler la barre d'action à l'aide de gettatagebar () .

La limitation vient avec essayer de contrôler les aspects de la barre d'action. Je peux définir le titre et l'icône bien, mais si j'essaie d'utiliser actionbardrawertoggle i obtenez un nullpointerexception . J'ai également remarqué que Tapping sur la barre d'action ne fait rien quand il ouvre normalement le tiroir.


2 commentaires

Utilisez-vous Eclipse ?? Ce que j'ai posté fonctionnait bien pour moi dans le studio Android.


Oui, j'utilise Eclipse



0
votes

Avez-vous essayé de mettre getwindow (). DemandeFeature (fenêtre.feature_action_bar); Dans votre Oncreate () méthode? Cela m'a aidé une fois. Essayez également de changer de thème sur holo


3 commentaires

Merci pour la réponse, cela rapporte 11-17 08: 57: 16.936: E / Androidruntime (28556): Java.lang.noschfielderRor: Pas de champ statique Dreamarrowtoggle de type [I in Class Landroid / Support / V7 / AppCompat / R $ styleable; ou ses superclasses (déclaration de 'android.support.v7.appcompat.r $ styleable' apparaît dans /data/app/com.jampez.smalltalk-3/base.apk)


Essayez d'utiliser Barre d'outils au lieu de Actionbar , comme Veer3383 suggère. Les projets par défaut Android Studio V7 sont déjà créés avec la barre d'outils, ce qui pourrait donc être la meilleure solution.


Le thème Holo est remarquable en son absence de la liste d'achèvement automatique, milieu 2021.