J'ai placé à l' setHasOptionsMenu(true)
intérieur onCreateView
, mais je ne peux toujours pas appeler des onCreateOptionsMenu
fragments intérieurs.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.facesheet, container, false);
}
Ci-dessous mon onCreateOptionsMenu
code.
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
getSupportMenuInflater().inflate(R.menu.layout, menu);
return (super.onCreateOptionsMenu(menu));
}
Le message d'erreur que je reçois:
La méthode
onCreateOptionsMenu(Menu)
de type Fragment doit remplacer ou implémenter une méthode de supertype.
Réponses:
essaye ça,
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_sample, menu); super.onCreateOptionsMenu(menu,inflater); }
Et
onCreate
ajoutez cette ligne pour faire apparaître les options dans votreToolbar
setHasOptionsMenu(true);
la source
setHasOptionsMenu(true);
setHasOptionsMenu(true);
doit être appeléonCreate()
pour être complet.Vous avez déjà le fichier généré automatiquement res / menu / menu.xml définissant action_settings .
Dans votre MainActivity.java, utilisez les méthodes suivantes:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_settings: // do stuff, like showing settings fragment return true; } return super.onOptionsItemSelected(item); // important line }
Dans la
onCreateView()
méthode de votre appel Fragment:setHasOptionsMenu(true);
et ajoutez également ces 2 méthodes:
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.fragment_menu, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_1: // do stuff return true; case R.id.action_2: // do more stuff return true; } return false; }
Enfin, ajoutez le nouveau fichier res / menu / fragment_menu.xml définissant action_1 et action_2 .
De cette façon, lorsque votre application affiche le fragment, son menu contient 3 entrées:
la source
J'ai essayé les réponses @Alexander Farber et @Sino Raj. Les deux réponses sont bien, mais je ne pouvais pas utiliser le onCreateOptionsMenu dans mon fragment, jusqu'à ce que je découvre ce qui manquait:
Ajoutez setSupportActionBar (barre d'outils) dans mon activité, comme ceci:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.id.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); }
J'espère que cette réponse peut être utile pour quelqu'un avec le même problème.
la source
Appel
setSupportActionBar(toolbar)
à l'intérieur
onViewCreated(...)
du fragment
@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); ((MainActivity)getActivity()).setSupportActionBar(toolbar); setHasOptionsMenu(true); }
la source
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.activity_add_customer, container, false); setHasOptionsMenu(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_sample, menu); super.onCreateOptionsMenu(menu,inflater); }
la source
Set setHasMenuOptions (true) fonctionne si l'application a un thème avec Actionbar tel que
Theme.MaterialComponents.DayNight.DarkActionBar
ouActivity
a sa propre barre d'outils, sinononCreateOptionsMenu
in fragment n'est pas appelé.Si vous souhaitez utiliser autonome,
Toolbar
vous devez soit obtenir une activité et définir votreToolbar
barre d'action comme support avec(requireActivity() as? MainActivity)?.setSupportActionBar(toolbar)
qui permet à votre fragment onCreateOptionsMenu d'être appelé.
Une autre alternative est, vous pouvez gonfler votre
Toolbar
propre menu avectoolbar.inflateMenu(R.menu.YOUR_MENU)
un auditeur d'élément avectoolbar.setOnMenuItemClickListener { // do something true }
la source