Rajeev Sahu
Rajeev Sahu

Reputation: 1732

Change menu item after selection in Android

I am trying to replace the menu item to another menu item after selection. I tried the following but it is not working as expected. Any solutions to this. thanks.

The menu.xml file is:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/add" android:visible="true" android:enabled="true" android:title="Add"></item>
    <item android:id="@+id/delete" android:visible="false" android:enabled="true" android:title="Delete"></item>
</menu>

The code inside MyActivity.java is:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.defaultmenu, menu);
        return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        if(isAdded) {
            menu.removeItem(R.id.add);
            menu.add(0, R.id.delete, 0, "Delete");
        } else {
            menu.removeItem(R.id.delete);
            menu.add(0, R.id.add, 0, "Add");
        }

        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.add:
                isLogin = true;
                return true;
            case R.id.delete:
                isLogin = false;
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

Upvotes: 1

Views: 636

Answers (3)

Rajeev Sahu
Rajeev Sahu

Reputation: 1732

I Changed the onPrepareOptionsMenu, now it's working fine.

@Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        //menu.clear();
        if(isadded) {
            menu.removeItem(R.id.add);
            menu.removeItem(R.id.delete);
            menu.add(0, R.id.delete, 0, "Delete");
        } else {
            menu.removeItem(R.id.add);
            menu.removeItem(R.id.delete);
            menu.add(0, R.id.add, 0, "Add");
        }

        return super.onPrepareOptionsMenu(menu);
    }

Upvotes: 0

NagarjunaReddy
NagarjunaReddy

Reputation: 8645

Try like this

public static final int ADD_CATEGORY_INDEX = Menu.FIRST;
public static final int DELETE_CATEGORY_INDEX= Menu.FIRST+1;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    menu.add(0, ADD_CATEGORY_INDEX, 0, "Add");
          menu.add(0, DELETE_CATEGORY_INDEX, 0, "delete");

    return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case ADD_CATEGORY_INDEX:             
        break;
    }
            case DELETE_CATEGORY_INDEX:          
        break;
    }
    return true;
}

Upvotes: 0

Nermeen
Nermeen

Reputation: 15973

To refresh your menu call invalidateOptionsMenu();
And i guess in onPrepareOptionsMenu, you can do..

if(isAdded) {
        menu.findItem(R.id.add).setVisible(false);
        menu.findItem(R.id.delete).setVisible(true);
        return true;
    } else {
        menu.findItem(R.id.add).setVisible(true);
        menu.findItem(R.id.delete).setVisible(false);
        return true;
    }

    return super.onPrepareOptionsMenu(menu);

Upvotes: 3

Related Questions