我使用具有更多 Fragment
的菜单抽屉。在某些 Fragment
中,我有菜单项 REFRESH,但在某些 fragment 中,我想隐藏此菜单项(我不想显示菜单,但我不想隐藏 ActionBar
) .
我尝试将覆盖 onCreateOptionsMenu()
添加到 Fragment
我不想显示此菜单项但无法使其工作的地方。我尝试了很多方法来查看代码中的注释行。知道问题出在哪里吗?最后,当我在 MainActivity 中调用 onPrepareOptionsMenu()
时,当我激活菜单抽屉时,这个菜单项会隐藏,但是当我在 Fragment
中时我需要这样做。
Fragment
我想在其中隐藏菜单项 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);
}
最佳答案
在要隐藏Item的 fragment 中
@Override
public void onPrepareOptionsMenu(Menu menu) {
MenuItem item=menu.findItem(R.id.action_search);
if(item!=null)
item.setVisible(false);
}
在你的 fragment 的 onCreate() 中
setHasOptionsMenu(true);
关于android - 在某些 fragment 中隐藏 MenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21498534/