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)
типа фрагмент должен переопределить или реализовать метод супертипа.
5 ответов:
попробуйте это,
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_sample, menu); super.onCreateOptionsMenu(menu,inflater); }
и
onCreate
добавьте эту строку, чтобы параметры появились в вашемToolbar
setHasOptionsMenu(true);
у вас уже есть автогенерированный файл 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
я попробовал ответы @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); }
Я надеюсь, что этот ответ может быть полезен для кого-то с той же проблемой.
вызов
setSupportActionBar(toolbar)
внутри
onViewCreated(...)
фрагмента
@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); }