J'ai une barre d'outils ainsi qu'un tiroir de navigation. Lorsque je lance mon application, la barre d'outils et le tiroir de navigation sont créés. Lorsque je clique sur des éléments du tiroir de navigation, de nouveaux fragments sont créés et la même barre d'outils est conservée. Comment puis-je ajouter des éléments de menu à la barre d'outils tels que rechercher, ajouter, modifier lorsque je commence des fragments spécifiques? Je ne les veux pas au début du programme, mais créé de manière dynamique. 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 de la barre d’outils fait une chose spécifique par rapport au bouton d’édition d’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"
/>
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.library_fragment, parent, false);
setHasOptionsMenu(true);
return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.your_menu_xml, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Voici comment créer un menu de manière dynamique: 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 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 sur une même activité . Faites les choses suivantes dans chaque fragment comme vous le souhaitez:
Dans la méthode OnCreateView, appelez
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 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);
}
}
Remplacez la méthode onCreateOptionsMenu
dans chacun de vos fragments.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.your_menu_xml, menu);
super.onCreateOptionsMenu(menu, inflater);
}
J'ai résolu ce problème correctement. Ma solution est comme 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);
}
J'avais 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 ne montrer 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 va aider.
Vous trouverez ci-dessous les étapes à suivre pour 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’option associés aux fragments.
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)
}