Hide MenuItem in some Fragments

≯℡__Kan透↙ 提交于 2019-11-28 04:50:16
Luis

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.

In the fragment where you want to hide the Item

@Override
public void onPrepareOptionsMenu(Menu menu) {
    MenuItem item=menu.findItem(R.id.action_search);
    if(item!=null)
       item.setVisible(false);
}

and in onCreate() of your fragment

 setHasOptionsMenu(true);

please try this

@Override 
public void onPrepareOptionsMenu(Menu menu) {
    menu.clear();
}

and put this on your fragmen's onCreate()

setHasOptionsMenu(true);

In Fragment Class

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();
    }

I just used below code for hiding menuitem in fragmnet where i dnt want to use it. Note:Please read comment

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    Fragment whichFragment=getVisibleFragment();//getVisible method return current visible fragment
    String shareVisible=whichFragment.getClass().toString();
    if(shareVisible.equals(AccFragment.class.toString())
            ||shareVisible.equals(SocFragment.class.toString())
            ||shareVisible.equals(DevFragment.class.toString())
            ){
        MenuItem item=menu.findItem(R.id.action_share);
        item.setVisible(false);
    }
    return super.onCreateOptionsMenu(menu);
}

There are many different versions of similar solutions but unfortunately, none of them worked for me. I am sharing what eventually was useful for me to hide the whole overflow menu with multiple menu items. Thought maybe it's useful for anyone.

I grouped my menus with an id and then referred that id

@Override
public void onPrepareOptionsMenu(Menu menu) {
    menu.setGroupVisible(R.id.menu_overflow, false);
    super.onPrepareOptionsMenu(menu);
}

If you want to hide any individual menu item then you can use

menu.getItem(R.id.action_licenses).setVisible(false);

Important thing is that you should have setOptionsMenu(true) in onViewCreated()

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    setHasOptionsMenu(true);

Or solve it in the same Fragment which created the menu, if you host the Actionbar on Activity level. This way you don't have to add it on every other Fragment where you don't want to show it:

public override void OnDestroy()
{
    base.OnDestroy();
    HasOptionsMenu = false;
}

Add these functions to your Fragment

  @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);
        }
        @Override
        public void onPrepareOptionsMenu(Menu menu) {
            MenuItem item=menu.findItem(R.id.delete);
            item.setVisible(false);
        }
David Wanjohi

Just find the item you want to hide using findItem then set its visibility to false.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    MenuItem item = menu.findItem(R.id.action_settings);
    item.setVisible(false);
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!