У меня есть простое приложение с меню опций, которое меняется в начале фрагментов. Проблема в том, что в начале все фрагменты, кроме первого onCreateOptionsMenu(), вызываются дважды - внутри onCreate() и after onResume(). В onCreate() я называю это вручную через setHasOptionsMenu (true), но после onResume() этого не должно произойти. Кроме того, это происходит только после начала первого фрагмента.
Вот код базовых фрагментов:
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);
}
}
И изменение кода фрагментов в Activity:
public void startFragment(BaseFragment fragment) {
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, fragment)
.commit();
}
Образец не использует внешнюю библиотеку, такую как ActionBarSherlock, только SupportLibrary. Я полагаю, проблема заключается в методе FragmentTransaction replace(), потому что он отлично работает, когда начинается первый фрагмент. Но я не знаю, с чего начать решать проблему. Мне нужно точно заменить фрагмент в представлении.