在某些片段中隐藏 MenuItem [英] Hide MenuItem in some Fragments
问题描述
我使用具有更多 Fragment
的菜单抽屉.在某些 Fragment
s 我有菜单项 REFRESH 但在某些片段中我想隐藏这个菜单项(我不想显示菜单但我不想隐藏 ActionBar
).
I using menu drawer which has more Fragment
s. In some Fragment
s I have menu item REFRESH but in some fragments I want hide this menu item (I don't want show menu but I don't want hide ActionBar
).
我尝试将覆盖 onCreateOptionsMenu()
添加到 Fragment
中,我不想在其中显示此菜单项,但无法使其正常工作.我尝试了很多方法来查看代码中的注释行.知道问题出在哪里吗?最后,当我在 MainActivity 中调用 onPrepareOptionsMenu()
时激活菜单抽屉时,这个菜单项会隐藏,但是当我在 Fragment
中时我需要这样做.
I try add override onCreateOptionsMenu()
to Fragment
where I don't want show this menu item but I can not get it to work. I try many way see commented line in code. Does any idea where is problem? And last this menu item go to hide when I activate menu drawer when is called onPrepareOptionsMenu()
in MainActivity but I need do this when I'm in Fragment
.
Fragment
我想隐藏菜单项刷新的位置:
Fragment
where I want hide menu item REFRESH:
public class FindPeopleFragment extends Fragment {
public FindPeopleFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_find_people, container, false);
//setHasOptionsMenu(false);
return rootView;
}
private Menu menu=null;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
inflater.inflate(R.menu.main, menu);
this.menu=menu;
menu.findItem(R.id.refresh).setVisible(false);
getActivity().invalidateOptionsMenu();
//setHasOptionsMenu(false);
super.onCreateOptionsMenu(menu,inflater);
}
}
MainActivity 其中定义了 MENU DRAWER:
//Slide menu item click listener
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// display view for selected nav drawer item
displayView(position);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case R.id.refresh:
Toast.makeText(this, "Refreshing data...", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
// Called when invalidateOptionsMenu() is triggered
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.refresh).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
推荐答案
在Fragment
中不想显示任何菜单选项的地方,需要setHasOptionsMenu(false);
在 onCreate()
中,像这样:
In the Fragment
where you don't want to show any menu options, you need setHasOptionsMenu(false);
in the onCreate()
, like this:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(false);
}
但是,您想要隐藏(刷新)的显示菜单属于 MainActivity.这就是它始终显示的原因.由于您想在 Fragment
级别控制菜单(而不是显示 Activity
选项菜单),我的建议是从 Activity<中删除菜单代码/code> 并在您的
Fragment
中实现它.
However, the menu that is being shown that you would like to hide (REFRESH), belongs to MainActivity. That is why it is always shown. Since you want to control the menu at the Fragment
level (and not show an Activity
options menu), my suggestion is to delete the menu code from the Activity
and implement it in your Fragment
.
Activity
s 和 Fragment
s 都可以有自己独立的菜单.请参阅此链接.
Activity
s and Fragment
s can each have their own separate menus. See this link.
这篇关于在某些片段中隐藏 MenuItem的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!