OnCreateOptionsMenu внутри фрагментов
Я разместил setHasOptionsMenu(true)
внутри onCreateView
, но я все еще не могу вызвать onCreateOptionsMenu
внутри фрагментов.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.facesheet, container, false);
}
Ниже приведен мой код onCreateOptionsMenu
.
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
getSupportMenuInflater().inflate(R.menu.layout, menu);
return (super.onCreateOptionsMenu(menu));
}
Сообщение об ошибке, которое я получаю:
Метод onCreateOptionsMenu(Menu)
типа Fragment должен переопределить или реализовать метод супертипа.
Ответы
Ответ 1
попробуйте это,
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}
И в onCreate
добавьте эту строку, чтобы сделать параметры в вашем Toolbar
setHasOptionsMenu(true);
Ответ 2
У вашего уже есть автогенерированный файл res/menu/menu.xml, определяющий action_settings.
В MainActivity.java есть следующие методы:
@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
}
В методе onCreateView()
вашего вызова фрагмента:
setHasOptionsMenu(true);
а также добавьте эти 2 метода:
@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;
}
Наконец, добавьте новый файл res/menu/fragment_menu.xml, определяющий action_1 и action_2.
Таким образом, когда ваше приложение отображает фрагмент, его меню будет содержать 3 записи:
- action_1 из res/menu/fragment_menu.xml
- action_2 из res/menu/fragment_menu.xml
- action_settings из res/menu/menu.xml
Ответ 3
Я попробовал ответить @Alexander Farber и @Sino Raj. Оба ответа хороши, но я не мог использовать onCreateOptionsMenu внутри своего фрагмента, пока не обнаружил, что не хватает:
Добавьте в свою активность setSupportActionBar (панель инструментов), например:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
Я надеюсь, что этот ответ может быть полезен для кого-то с той же проблемой.
Ответ 4
@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);
}
Ответ 5
Вызов setSupportActionBar(toolbar)
внутри onViewCreated(...)
фрагмента
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
((MainActivity)getActivity()).setSupportActionBar(toolbar);
setHasOptionsMenu(true);
}