vijay g
vijay g

Reputation: 113

How to change the menubar Icon when pressed in Android

Here i am having menu bar with two items called notification_icon and favourite_icon when i pressed favourite_icon that should be changed as favourite_icon2.So that i have tried selector. Selector only works for android:state_pressed="true" not android:state_selected="true". s Please guide me to do that.Here i have added the following code for your refreence

menu_clg.xml (under menu)

<?xml version="1.0" encoding="utf-8"?>
<menu

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:appmunu="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".UserDashBoardFragment">
    <item
        android:id="@+id/action_notify"
        android:icon="@drawable/mail_icon"
        appmunu:showAsAction="always"
        android:title="Notification" />
    <item
        android:id="@+id/action_favourite"
        android:icon="@drawable/icon_selector"
        appmunu:showAsAction="always"
        android:title="Favourite" />


</menu>

this is icon_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_selected="true"
        android:drawable="@drawable/vijay"

        />

    <item
        android:state_selected="false"
        android:drawable="@drawable/favourite_icon"
        />
</selector>

this is activity code

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_clg, menu);
        mMenu = menu;


        return true;
    }

    // delete the selected event from event list added here
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.action_notify:
                navigatetoNotification();
                return true;

            case R.id.action_favourite:
                favouriteClg();
                return true;


        }

        return super.onOptionsItemSelected(item);
    }

Upvotes: 0

Views: 98

Answers (1)

Varun Puravankara
Varun Puravankara

Reputation: 378

Now, what we want to do is, when the user clicks on the add icon “+” we will add a new item and change the add icon to remove “X” icon.

onOptionsItemSelected() will be called when a user clicks on an item. onOptionsItemSelected(MenuItem item) MenuItem object is passed as a parameter which is a reference to the clicked item. Using this object we can know which item has been clicked.

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

boolean canAddItem = false;
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(item.getItemId() == R.id.action_addItem){
        // ( 1 ) add a new item 
            // ( 2 ) change add to remove
    }
    else{
            // if a the new item is clicked show "Toast" message.
    }

    return super.onOptionsItemSelected(item);
}

}

We need to call onPrepareOptionsMenu(Menu menu) to add, remove and modify menu items. On Android 2.3.x and lower, the system calls onPrepareOptionsMenu() each time the user opens the options menu (presses the Menu button). On Android 3.0 and higher, we need to call invalidateOptionsMenu() to request that the system call onPrepareOptionsMenu().

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

boolean canAddItem = false;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Toast toast;
    if(item.getItemId() == R.id.action_addItem){
        invalidateOptionsMenu();
    }
    else{
        toast = Toast.makeText(this, item.getTitle()+" Clicked!", Toast.LENGTH_SHORT);
        toast.show();
    }

    return super.onOptionsItemSelected(item);
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    if(canAddItem){
        menu.getItem(0).setIcon(R.drawable.ic_content_remove);
        MenuItem mi = menu.add("New Item");
        mi.setIcon(R.drawable.ic_location_web_site);
        mi.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        canAddItem = false;
    }
    else{
        menu.getItem(0).setIcon(R.drawable.ic_content_new);
        canAddItem = true;
    }

    return super.onPrepareOptionsMenu(menu);
}

}

Hope it helps.

Upvotes: 2

Related Questions