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

Меню раздувает вызовы несколько раз при фрагменте onCreateOptionsMenu

Я использую фрагменты, и когда я переключаюсь на вложенный фрагмент, который реализует public void onCreateOptionsMenu(Menu menu, MenuInflater inflater), мое меню раздувает количество раз, когда я добираюсь до этого вложенного фрагмента. Как я могу избежать этого? Я также реализую конструктор Fragment с помощью методов:

setRetainInstance(true);
setHasOptionsMenu(true);

Когда я попытался реализовать решение siple как:

 @Override
 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
     // TODO Add your menu entries here
   if(!isInflated)
         {
         inflater.inflate(R.menu.contacts_archive_menu, menu);
         isInflated = true;
         }
         super.onCreateOptionsMenu(menu, inflater);

 }

но мое меню не было надуто после вращения экрана.

4b9b3361

Ответ 1

Я решил это просто, очистив меню до его флексирования:

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

     }

Ответ 2

Просто проверьте количество элементов menu. Значение menu.size()==0, нет элементов menu, затем надувается с помощью layout menu, иначе не раздувайте вообще.

 @Override
 public void   onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
      if (menu.size() == 0)
      inflater.inflate(R.menu.call_menu, menu);
      super.onCreateOptionsMenu(menu, inflater);

 }

Ответ 3

Используйте перед заменой.

фрагмент = новый EditMyProfile();                         android.support.v4.app.FragmentTransaction fragmentTransactionEditProfile =. GetSupportFragmentManager() BeginTransaction();                         getSupportFragmentManager(). popBackStack (null, FragmentManager.POP_BACK_STACK_INCLUSIVE);                         fragmentTransactionEditProfile.replace(R.id.frame, фрагмент);                         fragmentTransactionEditProfile.commit();