J'ai ActionBarActivity
avec NavigationDrawer
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
devrait indiquer le titre.
Comment obtenir l'instance Toolbar
pour la personnalisation à partir de fragments? Je peux obtenir ActionBar avec getActivity().getActionBar()
, mais si j'appelle setTitle()
pour cette instance, ActionBar ne fait rien.
UPD:
Dans mon cas
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle();
(comme MrEngineer13 l'a dit) ne fonctionne pas à la création de premier fragment car je l'appelle de onHiddenChanged (). Maintenant, j'en ajoute plusieurs à onCreateView () et cela fonctionne bien.
Vous devez convertir votre activité de getActivity()
à AppCompatActivity
en premier. Voici un exemple:
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle();
La raison pour laquelle vous devez le lancer est parce que getActivity()
renvoie FragmentActivity
et que vous avez besoin de AppCompatActivity
Si les fragments doivent avoir une vue personnalisée de la barre d'outils, vous pouvez implémenter la barre d'outils séparément pour chaque fragment.
ajoute la barre d'outils dans fragment_layout:
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="?attr/colorPrimaryDark"/>
trouvez-le en fragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
//set toolbar appearance
toolbar.setBackground(R.color.material_blue_grey_800);
//for crate home button
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
le programme d'écoute de menu peut être créé de deux manières:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case Android.R.id.home:
getActivity().onBackPressed();
}
return super.onOptionsItemSelected(item);
}
ou définir un écouteur pour la barre d’outils lors de sa création dans onCreateView ():
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
return false;
}
});
Vous avez deux choix pour obtenir la barre d'outils dans le fragment
Premier
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
et le second
Toolbar toolbar = ((MainActivity) getActivity()).mToolbar;
toolbar = (Toolbar) getView().findViewById(R.id.toolbar);
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);
Vous pouvez créer une méthode pour cela sur votre classe d'activité:
public void setToolbarTitle(String title) {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(title);
}
Et vous pouvez utiliser comme ceci:
setToolbarTitle("Hello World");
Peut-être devrez-vous essayer getActivity().getSupportActionBar().setTitle()
si vous utilisez support_v7.
Pour les utilisateurs de Kotlin (activity as AppCompatActivity).supportActionBar!!.show()
À partir de votre fragment: (obtenir la barre d'outils de fragment?)
// get toolbar
((MainAcivity)this.getActivity()).getToolbar(); // getToolbar will be method in Activity that returns Toolbar!! don't use getSupportActionBar for getting toolbar!!
// get action bar
this.getActivity().getSupportActionBar();
ceci est très utile lorsque vous utilisez spinner dans la barre d'outils et appelez le spinner ou le personnalisé vues dans la barre d'outils à partir d'un fragment!
De votre activité:
// get toolbar
this.getToolbar();
// get Action Bar
this.getSupportActionBar();
Je l'ai fait en utilisant ces étapes.
onCreateView
du fragment principal.((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Your title");
MainActivity
(Activité parentale) du fragment. Même si vous utilisez un bouton ou un élément de menu, vous pouvez modifier le titre de onSelectedItemClickListener
, comme je l’ai fait dans mon cas. public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.menu_dashboard:
getSupportActionBar().setTitle("Dashboard");
fm.beginTransaction().hide(active).show(dashboardFragment).commit();
active = dashboardFragment;
return true;
case R.id.menu_workshop:
getSupportActionBar().setTitle("Workshops");
fm.beginTransaction().hide(active).show(workshopFragment).commit();
active = workshopFragment;
return true;
}
return false;
}