Имеется простое приложение, построенное на фрагментах. При смене фрагмента должно производиться создание меню с помощью ActionBar:
class BaseFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle clicks
return true;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Create a menu
super.onCreateOptionsMenu(menu, inflater);
}
}
Код, запускающий фрагмент:
public void startFragment(BaseFragment fragment) {
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, fragment)
.commit();
}
Проблема в том, что onCreateOptionsMenu() во запускающемся фрагменте вызывается дважды — первый раз, как и указанно, во время onCreate(), а вот во второй раз после вызова onResume(). Причем при запуске самого первого по порядку фрагмента все работает нормально, а вот после него уже начинается эта ошибка.
Из библиотек для чистоты эксперимента оставил только SupportLibrary.
Могу предположить, что источник проблемы в методе startFragment(), т.к. там вызывается replace(), и ошибка происходит после первого запуска. Но мне действительно надо замещать фрагменты в android.R.id.content.
Каким образом можно было бы решить проблему?