我正在尝试在更改片段时隐藏一些菜单项,但似乎这不起作用。这就是我在做什么: 定义菜单和菜单项:
@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 :(得分:0)
我不知道它为什么不起作用,但尝试直接在onCreateOptionMenu
更改可见性。
如果有效,那么当您要隐藏它时,请致电invalidateOptionsMenu
(或supportInvalidateOptionsMenu
进行操作栏compat),它会强制再次调用onCreateOptionMenu
,您可以更新菜单是否存在片段。
答案 1 :(得分: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);
}