OnPrepareOptionsMenu не будет вызван в фрагменты
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater){
Log.d("Does", "get called");
inflater.inflate(R.menu.menuItem, menu);
super.onCreateOptionsMenu(menu,inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
getActivity().invalidateOptionsMenu();
MenuItem filter = menu.findItem(R.id.section);
filter.setVisible(false);
}
Я пытаюсь загрузить мое меню в фрагменты и его получить loaed, но onPrepareOptionsMenu
не получает вызов вообще, где мне нужно скрыть некоторые элементы меню.
Update:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
Я вызываю setHasOptionsMenu(true)
внутри моего метода onCreate()
.
Ответы
Ответ 1
В Android 3.0 и выше меню опций считается всегда открытым, когда пункты меню представлены в панели действий. Когда происходит событие и вы хотите выполнить обновление меню, вы должны вызвать invalidateOptionsMenu(), чтобы запросить, чтобы системный вызов onPrepareOptionsMenu().
http://developer.android.com/guide/topics/ui/menus.html
Чтобы изменить использование определенного элемента: menu.findItem(R.id.your_item_id)
Ответ 2
Возможно, слишком поздно, но у меня была такая же проблема, и решение было действительно простым.
Просто вызовите getActivity(). InvalidateOptionsMenu() из вашего фрагмента.
Это вызовет функциюPrepareOptionsMenu, и здесь вы сможете контролировать видимость ваших товаров следующим образом:
menu.findItem(R.id.youritem).setVisible(истина/ложь);
Надеюсь, что это поможет!
Ответ 3
Вам нужно сделать две вещи.
Шаг 1: В фрагменте OnCreateView добавьте setHasOptionsMenu (true);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
setHasOptionsMenu(true);
return inflater.inflate(R.layout.fragment_user_settings, container, false);
}
Шаг 2: вам нужно добавить getActivity(). invalidateOptionsMenu(); в вашем фрагменте в OnViewCreated. Или в mainActivity, когда вы изменяете фрагмент.
Ответ 4
Это работает для меня.
public class ContentFragment extends android.support.v4.app.Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.content_frame,container,false);
setHasOptionsMenu(true);
return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.note_menu,menu);
super.onCreateOptionsMenu(menu, inflater);
}
}