隐藏菜单项中的一些片断 [英] Hide MenuItem in some Fragments

查看:114
本文介绍了隐藏菜单项中的一些片断的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用菜单中的抽屉里面有更多的片段秒。在某些片段的I有菜单项刷新,但在某些片段我想隐藏该菜单项(我不想显示菜单,但我并不想隐藏动作条)。

我尝试添加覆盖 onCreateOptionsMenu()片段在这里我不想显示该菜单项,但我无法得到它的工作。我尝试了很多办法见注释行code。是否有想法在哪里的问题?而在去年这个菜单项走的时候我激活菜单抽屉时,被称为在prepareOptionsMenu()在MainActivity隐瞒,但我需要做到这一点,当我在片段

片段在这里我要隐藏菜单项刷新:

 公共类FindPeopleFragment扩展片段{
    公共FindPeopleFragment(){}

    @覆盖
    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
            捆绑savedInstanceState){
        查看rootView = inflater.inflate(R.layout.fragment_find_people,集装箱,假);
        // setHasOptionsMenu(假);
        返回rootView;
    }

    私人菜单菜单= NULL;
    @覆盖
    公共无效onCreateOptionsMenu(功能菜单,MenuInflater充气)
    {
        inflater.inflate(R.menu.main,菜单);
        this.menu =菜单;
        menu.findItem(R.id.refresh).setVisible(假);
        。getActivity()invalidateOptionsMenu();
        // setHasOptionsMenu(假);
        super.onCreateOptionsMenu(菜单,充气);
    }
}
 

MainActivity在这里被定义菜单抽屉:

  //滑动菜单点击监听器
私有类SlideMenuClickListener工具
        ListView.OnItemClickListener {
    @覆盖
    公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,
                            长ID){
        对选定的导航抽屉的项目//显示视图
        displayView(位置);
    }
}

@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
    。getMenuInflater()膨胀(R.menu.main,菜单);
    返回true;
}

@覆盖
公共布尔onOptionsItemSelected(菜单项项){
    //切换导航抽屉选择操作栏中的应用程序图标/标题
    如果(mDrawerToggle.onOptionsItemSelected(项目)){
        返回true;
    }
    开关(item.getItemId()){
        案例R.id.refresh:
            Toast.makeText(这一点,刷新数据......,Toast.LENGTH_SHORT).show();
            返回true;
    }
    返回super.onOptionsItemSelected(项目);
}

 //调用时invalidateOptionsMenu()被触发
@覆盖
公共布尔prepareOptionsMenu(功能菜单)在{
    //如果导航抽屉被打开,隐藏行动项目
    布尔drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.refresh).setVisible(drawerOpen!);
    返回super.on prepareOptionsMenu(菜单);
}
 

解决方案

片段,你不希望显示任何菜单选项,则需要 setHasOptionsMenu(假); 的onCreate(),像这样的:

  @覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(假);
}
 

然而,正在显示你想隐藏(刷新)菜单,属于MainActivity。这就是为什么它总是显示。既然要控制在片段一级菜单(而不是显示一个活动选项菜单),我的建议是从活动删除菜单code和在实现它的片段

活动片段 S能各自有自己独立的菜单。请参阅此链接

I using menu drawer which has more Fragments. In some Fragments 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).

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 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 where is defined 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);
}

解决方案

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);
}

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.

Activitys and Fragments can each have their own separate menus. See this link.

这篇关于隐藏菜单项中的一些片断的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆