web-dev-qa-db-fra.com

ActionBar (Support) avec Fragment (Support)

Je dois utiliser une combinaison de barre d'action et de fragments dans l'une de mes applications Android qui cible également Gingerbread. J'ai donc utilisé la barre d'action de la bibliothèque de support v7 et des fragments de la bibliothèque de support v4 et étendre ma classe avec FragmentActivity.

Je reçois une erreur lorsque je tape la ligne

actionbar = getSupportActionBar();

L'erreur indique que getSupportActionBar () n'est pas défini pour le type myFragmentClass (mon nom de classe). Le code fonctionne parfaitement sans la bibliothèque de support. Existe-t-il une solution à mon problème?

Merci!

18
Anirudh

Vous devez étendre ActionBarActivity au lieu de FragmentActivity pour avoir Actionbar avec des fragments.

Si vous utilisez la bibliothèque v7 appcompat, votre activité devrait plutôt étendre ActionBarActivity, qui est une sous-classe de FragmentActivity (pour plus d'informations, lisez Ajout de la barre d'actions).

Vous pouvez trouver plus d'informations sur la page ci-dessous. La ligne ci-dessus est tirée de la page ci-dessous (Dernier paragraphe). http://developer.Android.com/training/basics/fragments/creating.html

Edit- Ce n'est pas un bug. C'est juste un manque de connaissances. Parfois, les notions de base ne sont pas claires. J'apprends actuellement cela aussi sur le site Android, et c'est comme ça que je dois vous donner la réponse.

19
user3426273

écrire ce code dans la méthode OnAttach ():

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

ActionBarActivity est obsolète. Utilisation

actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();

41
bGorle

J'avais également essayé d'utiliser:

actionbar = getActivity().getSupportActionBar();

et cela n'a pas fonctionné jusqu'à ce que je fasse ceci:

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

Cela a donc fonctionné lorsque j'ai lancé mon activité principale.

8
Tinashe

pour Android.support.v7

ActionBar actionBar =  ((AppCompatActivity) getActivity()).getSupportActionBar();

//than next for example 
actionBar.setDisplayHomeAsUpEnabled(true);
8
Yuliia Ashomok

Pour appeler l'ActionBar à l'intérieur d'un fragment, utilisez ceci:

actionbar = getActivity().getSupportActionBar();

Un Fragment n'a pas d'ActionBar mais l'Activité. C'est pourquoi vous devez l'appeler de cette façon.

1
Steve Benett

Je l'ai essayé en étendant ActionBarActivity et en apportant quelques modifications dans AndroidManifest.xml comme

 <activity Android:name="yourActionbarActivity" 

Android: theme = "@ style/Theme.AppCompat.Light">

et ça marche bien pour moi

0
Zulfiqar