Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to hide menu item in android action bar?

My goal is to hide one of the menu items in the action bar and show another after clicking on menu item. In my application, i am using Toolbar. I have already looked for many other questions and did not find what I needed. Any help will be appreciated. I tried code below, but this crashes app after click.

public boolean onOptionsItemSelected(MenuItem item) {
    final SwipeRefreshLayout mySwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swiperefresh);
    switch (item.getItemId()) {
        case R.id.action_next:
            //code
            MenuItem secondItem = (MenuItem) findViewById(R.id.action_next);
            secondItem.setVisible(false);
            return true;

        case R.id.action_previous:
            //code
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
like image 844
Maros1515 Avatar asked Mar 19 '17 18:03

Maros1515


Video Answer


2 Answers

You can get a reference to the menu items which you would like to hide and show in onCreateOptionsMenu and then make one visible and the other invisible inside onOptionsItemSelected :

private MenuItem itemToHide;
private MenuItem itemToShow;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    itemToHide = menu.findItem(R.id.item_to_hide);
    itemToShow = menu.findItem(R.id.item_to_show);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_next:
            // hide the menu item
            itemToHide.setVisible(false);
            // show the menu item
            itemToShow.setVisible(true);
            return true;
    }      

    return super.onOptionsItemSelected(item);
}
like image 199
Nika Kurdadze Avatar answered Nov 08 '22 12:11

Nika Kurdadze


You are overriding the wrong function.

use this:

    @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    inflater.inflate(R.menu.menu, menu);
    MenuItem item = menu.findItem(R.id.action_next);
    item.setVisible(false);   //hide it
    super.onCreateOptionsMenu(menu, inflater);
}
like image 28
rafsanahmad007 Avatar answered Nov 08 '22 12:11

rafsanahmad007