J'ai une barre d'outils ainsi qu'un tiroir de navigation. Lorsque je démarre mon application, la barre d'outils et le tiroir de navigation sont créés. Lorsque je clique sur des éléments dans le tiroir de navigation, il démarre de nouveaux fragments et conserve la même barre d'outils. Comment ajouter des éléments de menu à la barre d'outils tels que rechercher, ajouter, modifier lorsque je démarre des fragments spécifiques? Je ne les veux pas au début du programme, mais créés dynamiquement. Aussi, comment pourrais-je cliquer sur ces boutons et les faire démarrer d'autres fragments. Je le veux donc dans un fragment, le bouton d'édition dans la barre d'outils fait une chose spécifique par rapport au bouton d'édition dans un autre fragment. Merci!
Menu_toolbar:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/edit"
android:orderInCategory="1"
android:title="Edit"
app:showAsAction="always"
android:icon="@drawable/pencil_icon"/>
<item android:id="@+id/add"
android:orderInCategory="1"
android:title="Add"
app:showAsAction="always"
android:icon="@drawable/plus_icon"/>
Barre d'outils:
<?xml version="1.0" encoding="utf-8"?>
<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="55dp"
android:background="#10a1ff"
android:title="Home"
/>
la source
menu.clear()
àonCreateOptionsMenu
- sinon vous héritez le menu du parent, aussi.Voici comment créer un menu dynamiquement: http://www.101apps.co.za/index.php/articles/using-toolbars-in-your-apps.html
Édité:
Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar); setSupportActionBar(actionBarToolBar); actionBarToolBar.setNavigationIcon(R.drawable.icon); actionBarToolBar.setNavigationContextDescription(getResources().getString(R.string.desc); actionBarToolBar.setLogo(R.drawable.other_icon); actionBarToolBar.setLogoDescription(getResources().getString(R.string.other_desc); actionBarToolBar.inflateMenu(R.menu.fragment_menu);
la source
actionBarToolbar.setOnMenuItemClickListener()
pour gérer les actions des éléments de menu.onOptionsItemSelected()
n'est pas appelé dans cette situation.La meilleure façon de le faire:
1. Recherchez la barre d'outils dans Activity et définissez-la comme supportActionBar.
Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar); setSupportActionBar(actionBarToolBar);
2. Ensuite, ce sera un jeu d'enfant de gérer les menus d'options pour différents fragments au cours d'une même activité. Procédez comme vous le souhaitez dans chaque fragment:
Dans l'appel de méthode OnCreateView
setHasOptionsMenu(true);
Et enfin,
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main, menu); super.onCreateOptionsMenu(menu, inflater); }
Et pour gérer les éléments de menu, cliquez sur, nous avons onOptionsItemSelected:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_search : Log.i("item id ", item.getItemId() + ""); default: return super.onOptionsItemSelected(item); } }
la source
Remplacez la
onCreateOptionsMenu
méthode dans chaque fragment.@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.your_menu_xml, menu); super.onCreateOptionsMenu(menu, inflater); }
la source
setTitle()
peut ajouter des titres.L'option la plus simple est de faire
toolbar.inflateMenu(R.menu.fragment_menu);
la source
J'ai résolu ce problème correctement. Ma solution est le code suivant:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment mRootView = inflater.inflate(R.layout.fragment_order_history, container, false); //getActivity().invalidateOptionsMenu(); setHasOptionsMenu(true); return mRootView; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main, menu); super.onCreateOptionsMenu(menu, inflater); }
la source
J'ai eu le même problème et je voulais remplacer le menu de la barre d'outils en fonction du fragment affiché.
Le problème auquel je suis maintenant confronté est que le menu est ajouté au précédent.
Afin de n'afficher que le menu du fragment, je suggère:
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.clear(); //Empty the old menu inflater.inflate(R.menu.menu_fragment1, menu); super.onCreateOptionsMenu(menu, inflater); }
J'espère que ça aidera.
la source
Vous trouverez ci-dessous les étapes permettant d'afficher différentes options de menu avec différents fragments.
Étape 1: Appelez setHasOptionsMenu (true)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { setHasOptionsMenu(true) super.onViewCreated(view, savedInstanceState) }
Étape 2: gonflez vos éléments de menu d'options liés au fragment.
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { // To clear previously added menu items menu?.clear() inflater?.inflate(R.menu.your_fragment_menu, menu) super.onCreateOptionsMenu(menu, inflater) }
la source
À l'intérieur de XML, ajoutez cette ligne
app:menu="@menu/main_menu"
la source
En utilisant la nouvelle MaterialToolbar, il est très facile de créer un menu à débordement et de l'utiliser pour:
<com.google.android.material.appbar.MaterialToolbar android:id="@+id/toolbar" android:layout_width="0dp" android:layout_height="?attr/actionBarSize" app:navigationIcon="@drawable/ic_menu" app:menu="@menu/main_menu"/>
puis dans le code pour définir les écouteurs OnCLick, ajoutez simplement ceci:
toolbar.setOnMenuItemClickListener { // .. DO SOMETHING HERE false }
la source