Я пробовал так много ответов, предоставленных различными сообщениями здесь, но у меня ничего не получилось.
Проблема. У меня есть панель навигации, в которой есть 6 фрагментов, но одно действие. Все работало нормально, пока я не изменил фрагмент 1-го ранга в ящике. Мне нужны вкладки Swipe внутри первого фрагмента. Поэтому я использовал FragmentStatePagerAdapter
.
Каждый фрагмент имеет свое меню вместе с MainActivity Menu.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Notify the system to allow an options menu for this fragment. setHasOptionsMenu(true); }
И надувается вот так:
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.story, menu); }
Все работает нормально. Но когда я посещаю другие фрагменты в навигационном ящике, он показывает дублирующее меню на панели инструментов. Он создает больше дубликатов, если на панели инструментов остается место, когда я посещаю другие фрагменты.
Попробуйте 1. Чтобы решить эту проблему, я сначала использовал:
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.clear();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.story, menu);
}
При этом я не получаю повторяющееся меню, но теперь я не вижу MainActivity menus
.
Попробуйте 2:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
getActivity().invalidateOptionsMenu();
inflater.inflate(R.menu.story, menu);
}
При этом я получаю меню «Фрагмент» и «Активность», но есть дубликаты.
Это должно быть легко решить, но я не понимаю, как с этим справиться. Может я плохо понял жизненный цикл?
Мой другой подход. Реализация всех меню во фрагментах поможет, но это должен быть наш последний вариант.
Решение этого. Чтобы поддерживать оба меню, все, что мне нужно сделать, это это (очень простое решение):
menu.clear();
inflater.inflate(R.menu.story, menu);
getActivity().getMenuInflater().inflate(R.menu.main, menu);
Проблема 2 Метод OnOptionsItemSelected
из 1-го фрагмента вызывается в других фрагментах.
setHasOptionsMenu(false);
. - person Piyush   schedule 18.12.2015