J'ai ActionBarActivity
avecNavigationDrawer
et utilise support_v7 Toolbar
comme ActionBar. Dans l'un de mes fragments, la barre d'outils a une vue personnalisée. Dans d'autres fragments Toolbar
, le titre doit être affiché.
Comment obtenir une Toolbar
instance pour la personnalisation à partir de fragments? Je peux obtenir ActionBar avec getActivity().getActionBar()
, mais si j'appellesetTitle()
cette instance ActionBar, cela ne fait rien.
UPD:
Dans mon cas
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle();
(comme MrEngineer13 l'a dit) ne fonctionne pas à la création du premier fragment car je l'appelle depuis onHiddenChanged (). Maintenant, j'en ajoute un à onCreateView () et cela fonctionne très bien.
android
android-fragments
android-actionbar
android-support-library
android-toolbar
anisart
la source
la source
Réponses:
Vous devez lancer votre activité de
getActivity()
laAppCompatActivity
première. Voici un exemple:La raison pour laquelle vous devez le lancer est que
getActivity()
renvoie unFragmentActivity
et vous avez besoin d'unAppCompatActivity
À Kotlin:
la source
Dans le cas où les fragments devraient avoir une vue personnalisée de ToolBar, vous pouvez implémenter ToolBar pour chaque fragment séparément.
ajoutez ToolBar dans fragment_layout:
trouvez-le en fragment:
l'écouteur de menu peut être créé de deux manières: override onOptionsItemSelected dans votre fragment:
ou définissez l'écouteur pour la barre d'outils lors de sa création dans onCreateView ():
la source
onOptionsItemSelected()
lieu de celle de Fragment, pour éviter la répétition du code.Vous avez deux choix pour obtenir la barre d'outils fragmentée
Premier
et deuxième
la source
la source
Pour les utilisateurs de Kotlin
(activity as AppCompatActivity).supportActionBar?.show()
la source
!!
est complètement évitable avec?
et cela vous évitera un éventuel crash(activity as? AppCompatActivity)?.supportActionBar?.show()
Vous devrez peut-être essayer
getActivity().getSupportActionBar().setTitle()
si vous utilisez support_v7.la source
De votre fragment: (obtenir la barre d'outils du fragment?)
cela est très utile lorsque vous utilisez le spinner dans la barre d'outils et que vous appelez le spinner ou les vues personnalisées dans la barre d'outils à partir d'un fragment!
De votre activité:
la source
En XML
Kotlin: Dans fragment.kt -> onCreateView ()
-> onCreateOptionsMenu ()
-> onOptionsItemSelected ()
la source
Je l'ai fait en utilisant ces étapes.
onCreateView
le fragment principal.MainActivity
(Activité parente) du fragment. Même si vous utilisez n'importe quel bouton ou élément de menu, vous pouvez modifier le titreonSelectedItemClickListener
, comme je l'ai fait dans mon cas.la source
si vous utilisez une barre d'outils personnalisée ou une ActionBar et que vous souhaitez obtenir une référence de votre barre d'outils / barre d'action à partir de Fragments, vous devez d'abord obtenir une instance de votre activité principale à partir de la méthode onCreateView de Fragment comme ci-dessous.
puis utilisez l'activité pour une mise en œuvre ultérieure comme ci-dessous
Avant d'appeler cela, vous devez initialiser votre barre d'outils personnalisée dans votre MainActivity comme ci-dessous.
Le premier ensemble définit votre barre d'outils publique comme
et dans la méthode onCreate () , attribuez l'ID de la barre d'outils personnalisée
C'est tout. Cela fonctionnera dans Fragment.
la source