@bvitaliyg

При запуске фрагмента onCreateOptionsMenu() вызывается дважды?

Имеется простое приложение, построенное на фрагментах. При смене фрагмента должно производиться создание меню с помощью 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.


Каким образом можно было бы решить проблему?
  • Вопрос задан
  • 5511 просмотров
Пригласить эксперта
Ответы на вопрос 1
futurelink
@futurelink
Для начала надо попробовать вот так, думаю поможет:

public void onCreate(Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        super.onCreate(savedInstanceState);
}


Пользовался именно таким методом замещения фрагмента, именно таким способом. Все работало прекрасно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы