我有一个Toolbar
被用作ActionBar
,有两个项目。我只希望一次显示一个因为它们互相替换。问题是当我替换Fragment
时,它会调用onCreateOptionsMenu
并再次膨胀菜单,这意味着将显示相同的操作按钮,即使另一个先前在{{1 }}。我需要更改ActionBar
中ActionBar
的所有内容或显示新的Fragments
(Fragment
)。所以我的问题是如何在显示新片段时调用FragmentManager.FragmentTransaction.replace()
?
我无法使用onCreateOptionsMenu
,因为我仍然需要它来重新定位方向更改。关于如何处理矿化的任何建议都会改变我的情况?
我可以发布代码,但它似乎更具概念性,我不确定它会有所帮助。
答案 0 :(得分:1)
我解决了这个问题,而不是不调用onCreateOptionsMenu
,我手动将这些项目添加到我的菜单中。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean refreshVisible;
if (refreshItem != null && refreshItem.isVisible()){//is being displayed prior to inflation
refreshVisible = true;
}else if (refreshItem == null){//it's null so the menu has never been created
refreshVisible = true;
}else {//it's not null and invisibe, other icon was being displayed
refreshVisible = false;
}
menu.clear();//clear menu so there are no duplicate or overlapping icons
getMenuInflater().inflate(R.menu.main, menu);//inflate menu
refreshItem = menu.findItem(R.id.refresh);
useDataItem = menu.findItem(R.id.use_data);
refreshItem.setVisible(refreshVisible);//if menu is being created for first time or item was previously visible, then display this item
useDataItem.setVisible(!refreshVisible);//display this item if not displaying other
return true;
}
答案 1 :(得分:0)
我会摆弄onPrepareOptionsMenu钩子。如果您可以检测到您的菜单不应该显示,那么您应该从那里开始返回false。每个文档:
准备要显示的屏幕标准选项菜单。每次显示菜单时都会调用此菜单。您可以使用此方法有效地启用/禁用项目或以其他方式动态修改内容。
和
您必须返回true才能显示菜单;如果你返回false,它将不会显示。
答案 2 :(得分:0)
您可以在片段中调用setHasOptionsMenu(false);
。
这将阻止在添加该片段时调用onCreateOptionsMenu()
。