0

Я пытаюсь скрыть некоторые пункты меню при изменении фрагмента, но кажется, что это не работает. Вот что им делать: Определение меню и пунктов меню:Изменение видимости элементов меню во фрагменте

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu items for use in the action bar 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.actionbar_sharecall, menu); 

     actionMenu = menu; 
     MenuItem searchItem = menu.findItem(R.id.action_searchmenuitem); 
     MenuItem item = menu.findItem(R.id.action_menushare); 
     // item.setVisible(false); 
     // searchItem.setVisible(false); 

     topSearch = searchItem; 
     topShare = item; 
     final MRShareActionProvider actionProvider = new MRShareActionProvider(
       this); 
     MenuItemCompat.setActionProvider(item, actionProvider); 
     actionProvider 
       .setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); 
     actionProvider.setOnShareTargetSelectedListener(this); 
     actionProvider.setShareIntent(createShareIntent()); 
     return true; 

    } 

изменения фрагмента и изменение видимости:

//changing visibility  
    topSearch.setVisible(false); 
    frag = new SyncFragment(); 
    FragmentTransaction ft = getSupportFragmentManager() 
    .beginTransaction(); 
    ft.replace(R.id.fragment_content, frag); 
    ft.commitAllowingStateLoss(); 

и это мой SyncFragment:

public class SyncFragment extends MRBaseACBFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_sync, null); 
    } 


} 

но после изменения фрагмента я все еще вижу элемент меню. Может ли кто-нибудь помочь мне с решением о том, как это сделать?

ответ

0

Я не знаю, почему это не работает, но попробуйте изменить видимость непосредственно в onCreateOptionMenu.

Если он работает, то, когда вы хотите, чтобы скрыть его называют invalidateOptionsMenu (или supportInvalidateOptionsMenu для ActionBar Compat), это заставит onCreateOptionMenu называться снова, и вы можете обновить меню, если фрагмент или нет.

0

в вашем фрагменте добавить ниже код

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

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



@Override 
    public void onPrepareOptionsMenu(Menu menu) { 
     super.onPrepareOptionsMenu(menu); 
     menu.findItem(R.id.action_cart).setVisible(false); 
     menu.findItem(R.id.action_search).setVisible(false); 
     menu.findItem(R.id.overflow).setVisible(false); 
    }