如何隐藏片段上的菜单(正在从布局中替换)?
How to hide menu on fragment (which is being replaced from the layout)?
我已经检查并尝试了所有可能的代码,但这些代码对我不起作用,因为我只是更换布局,没有不同 toolbar.I 我正在使用 fragments
和 NavigationDrawer
,navigationdrawer
有 listview
,单击列表项时,它会用以下片段替换布局。但是我如何隐藏 menu
或根据出现的不同布局修改它?
由于您没有提供您尝试过的代码,所以很难说什么可行。
我在一个也有 NavigationDrawer
的应用程序中工作,对我来说,不同之处在于在每个片段的 onCreateOptionsMenu
中调用 menu.clear()
。
示例代码如下所示:
@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);
}
}
如果您想从 Fragment
控制选项菜单,您需要在 Fragment
的 onCreate
中调用 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);
}
我已经检查并尝试了所有可能的代码,但这些代码对我不起作用,因为我只是更换布局,没有不同 toolbar.I 我正在使用 fragments
和 NavigationDrawer
,navigationdrawer
有 listview
,单击列表项时,它会用以下片段替换布局。但是我如何隐藏 menu
或根据出现的不同布局修改它?
由于您没有提供您尝试过的代码,所以很难说什么可行。
我在一个也有 NavigationDrawer
的应用程序中工作,对我来说,不同之处在于在每个片段的 onCreateOptionsMenu
中调用 menu.clear()
。
示例代码如下所示:
@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);
}
}
如果您想从 Fragment
控制选项菜单,您需要在 Fragment
的 onCreate
中调用 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);
}