Получить menu в android java

Есть меню, объявленное так:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Заполнение меню; элементы действий добавляются на панель приложения
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return super.onCreateOptionsMenu(menu);
}

Мне нужно изменять видимость одного из пунктов (search) этого меню (main_menu) при открытии соответствующей вкладки из этой вкладки. Пытаюсь делать это так:

Menu menu = getActivity().findViewById(menu.menu_main); // (Error) Здесь ошибка menu
getActivity().getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem search = menu.findItem(R.id.search);
search.setVisible(true);

Но возникает ошибка (студия не принимает "menu" в строке "// (Error)"). Как мне получить само меню в строке, в которой возникает ошибка?


Ответы (2 шт):

Автор решения: 3asys

Получилось таким образом: Создаю ссылку на полученное в коде menu:

public static Menu menu1;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu1 = menu;
    // Заполнение меню; элементы действий добавляются на панель приложения
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return super.onCreateOptionsMenu(menu);
}

Далее ссылаюсь на статическую переменную menu1 в другом фрагменте.

→ Ссылка
Автор решения: Andrew

Можно в фрагменте добавить в методе onCreate такую строку:

setHasOptionsMenu(true);

и дальше получать доступ к меню которое было добавлено в активности:

@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
    // Do something that differs the Activity's menu here
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.activity_menu_item:
        // Not implemented here
        return false;
    case R.id.fragment_menu_item:
        // Do Fragment menu item stuff here
        return true;
    default:
        break;
    }

    return false;
}

вот подобный вопрос

→ Ссылка