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中更改可见性。

如果一切正常,那么当你想隐藏它调用(用于动作条COMPAT或supportInvalidateOptionsMenuinvalidateOptionsMenu,这将迫使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); 
    }