Android Studio 1.4
我有一个工具栏,我在我的activity_main.xml膨胀。 我有一个名为main.xml的菜单,它被充气,只有一个图标可以显示在它上面。
当用户单击以打开片段时。 我有另一个菜单friends.xml ,有2个图标。
当我在片段中给朋友菜单充气时,它仍会显示main.xml菜单中的图标。
我认为在工具栏上膨胀新菜单会删除现有菜单。
这是main.xml菜单的屏幕截图。 将显示查找图标
这是片段的屏幕截图,因为您可以看到查找图标仍然存在。
包含工具栏的activity_main.xml
这是我在MainActivity.java中创建菜单的代码
private void setupToolBar() { mToolbar = (Toolbar)findViewById(R.id.tbMain); setSupportActionBar(mToolbar); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); }
在我的片段中我有这个,你可以看到我正在膨胀friends.xml菜单。
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.friends, menu); }
非常感谢任何建议,
我不确定你是否可以使用onCreateOptionsMenu()来做到这一点。 我认为你最好的选择是onPrepareOptionsMenu() 。
您可以通过在Fragment的onResume()编写getActivity().invalidateOptionsMenu()来强制Android刷新选项菜单。
所以你的onPrepareOptionsMenu()将如下所示:
@Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); menu.clear(); //remove all items getActivity().getMenuInflater().inflate(R.menu.menu_fragment, menu); }
将menu引用存储在variables中。
private Menu menu; @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); this.menu = menu; return super.onCreateOptionsMenu(menu); }
当替换提到的片段时,请执行以下操作。
private void hideOption(int id) { menu.findItem(id).setVisible(false); }
使用菜单ID调用hideOption() 。 对于前者,
hideOption(R.id.action_search);
反过来显示。或遵循#Droidwala的建议