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);
    }
}