Подтвердить что ты не робот

InvalidateOptionsMenu не вызывается из фрагмента

У меня есть фрагмент, которому нужно создать собственную панель действий:

public class CalendarFragment extends Fragment {

public CalendarFragment() {
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    getActivity().supportInvalidateOptionsMenu();
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.calendar_menu1, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    TextView textView = new TextView(getActivity());
    textView.setGravity(Gravity.CENTER);
    textView.setText("Calendar Fragment");
    return textView;
}

}

проблема заключается в том, что он не создает новое меню с элементами из calendar_menu1, а просто добавляет элементы из него в старое меню, как будто invalidateOptionsMenu не работает (я попробовал getActivity(). invalidateOptionsMenu() тоже)

4b9b3361

Ответ 1

Вы должны вызвать onCreate():

setHasOptionsMenu(true);

Ответ 2

Это нормально, глядя в javadoc MenuInflater, "Элементы и подменю будут добавлены в это меню":

public void inflate (int menuRes, Menu menu) 
Inflate a menu hierarchy from the specified XML resource. Throws InflateException if there is an error.

Parameters
menuRes  Resource ID for an XML layout resource to load (e.g., R.menu.main_activity) 
menu  The Menu to inflate into. The items and submenus will be added to this Menu. 

Вы пытались вызвать menu.clear() раньше, чтобы раздуть меню фрагментов?

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    menu.clear();
    inflater.inflate(R.menu.calendar_menu1, menu);
}