J'ai placé setHasOptionsMenu(true)
dans onCreateView
, mais je ne peux toujours pas appeler onCreateOptionsMenu
dans des fragments.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.facesheet, container, false);
}
Ci-dessous mon code onCreateOptionsMenu
.
@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 type supertype.
essaye ça,
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}
Et dans onCreate
, ajoutez cette ligne pour que les options apparaissent dans votre Toolbar
setHasOptionsMenu(true);
Vous avez déjà le fichier généré automatiquement res/menu/menu.xml define 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 méthode onCreateView()
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 define action_1 et action_2 .
Ainsi, lorsque votre application affiche le fragment, son menu contient 3 entrées:
J'ai essayé les réponses @Alexander Farber et @Sino Raj. Les deux réponses sont bien, mais je ne pouvais pas utiliser le menu onCreateOptionsMaint 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 qui a le même problème.
Appel
setSupportActionBar(toolbar)
à l'intérieur
onViewCreated(...)
de 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);
}
@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);
}