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); 
    }