我已经检查并尝试了这里所有可能的代码,但这些代码对我不起作用,因为我只是更换了没有不同工具栏的布局。我正在使用
fragments
和 NavigationDrawer
,navigationdrawer
有 listview
,单击列表项时,它会用以下片段替换布局。但是我如何隐藏menu
或根据出现的不同布局修改它?
如果你想从
Fragment
控制选项菜单你需要在onCreate
的Fragment
中调用setHasOptionsMenu:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
然后您可以添加、删除或清除覆盖
onCreateOptionsMenu
的菜单。例如,此代码删除选项菜单中的每个项目:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
}
对我有用,你可以试试这个代码
@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);
}
因为你没有提供你尝试过的东西的代码,所以很难说什么可能有效。
我在一个也有
NavigationDrawer
的应用程序中工作,对我来说,不同之处在于在每个片段的 menu.clear()
中调用 onCreateOptionsMenu
。
示例代码如下所示:
@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
if (!mNavigationDrawerIsOpened) {
// Clear the menu from menuitems added from other fragments
menu.clear();
// Inflate your new menu
inflater.inflate(R.menu.new_fragment, menu);
// get the menu items of that new menu
MenuItem item = menu.findItem(R.id.action_traffic_spinner);
}
}
由于
setHasOptionsMenu()
和 onCreateOptionsMenu()
现已弃用,您也可以通过以下方式执行此操作:
例如在
onCreateView()
-method你可以删除你的菜单项:
requireActivity().addMenuProvider(new MenuProvider() {
@Override
public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) {
menu.removeItem(R.id.menuItemToRemove);
}
@Override
public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {
return false; //report no menu selection handled
}
});
在
onStop()
-方法中,您可以再次添加它:
requireActivity().addMenuProvider(new MenuProvider() {
@Override
public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) {
menuInflater.inflate(R.menu.menu_main, menu);
}
@Override
public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {
return false; //report no menu selection handled
}
});
setHasOptionsMenu() 和 onCreateOptionsMenu() 现已弃用,您也可以使用以下方法执行此操作:
requireActivity().addMenuProvider(new MenuProvider() {
@Override
public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) {
menuInflater.inflate(R.menu.menu_reporte,menu);
}
@Override
public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {
switch(menuItem.getItemId())
{
case R.menu.menu_reporte:
break;
}
return true;
}
},getViewLifecycleOwner(), Lifecycle.State.RESUMED);