Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

inflate sherlock action bar menu from xml and for each fragment

I'm creating action bar menu in my main activity:

public boolean onCreateOptionsMenu(Menu menu) {
    // Used to put dark icons on light action bar
    SubMenu sub = menu.addSubMenu(null);
    sub.add(0, R.style.Theme_Sherlock, 0, "Default");
    sub.add(0, R.style.Theme_Sherlock_Light, 0, "Light");
    sub.add(0, R.style.Theme_Sherlock_Light_DarkActionBar, 0,
            "Light (Dark Action Bar)");

    MenuItem ShareButton = sub.getItem();
    ShareButton.setIcon(R.drawable.ic_action_overflow);
    ShareButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS
            | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    return true;

}

And then in my fragment activity, I try to change menu for second fragment:

first i do this:
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

And I do this:

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Auto-generated method stub
        //final MenuInflater inflater2 = getMenuInflater();
        //inflater.inflate(R.menu.historymenu, menu);
        Log.v("Some Log", "I'm in on Create Options Menu");

        SubMenu sub = menu.addSubMenu(null);
        sub.add(0, R.style.Theme_Sherlock, 0, "HistoryCheck");


        MenuItem ShareButton = sub.getItem();
        ShareButton.setIcon(R.drawable.ic_action_overflow);
        ShareButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS
                | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

        super.onCreateOptionsMenu(menu, inflater);
    }

As you can see, I'd love to inflate menu from .xml for each fragment and main activity but for some reason inflation does nothing.

With code to add new submenu, I get 2 menus when I switch to second tab/fragment, and I'd love to change existing menu, not to add additional one.

Please help me to change correct line.

Tnx.

like image 216
Balkyto Avatar asked Dec 01 '25 16:12

Balkyto


1 Answers

If you want the menu to change, don't add one in your main activity, add the menu only in your fragment. That way when you switch fragments, the menu will switch accordingly.

You CAN inflate the menu from xml:

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

Just make sure you import com.actionbarsherlock.view.Menu and com.actionbarsherlock.view.MenuInflater.

the_menu.xml (with submenu)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_item"
        android:showAsAction="always"
        android:title="Menu">
        <menu>
            <item
                android:id="@+id/submenu_1"
                android:showAsAction="always"
                android:title="submenu 1"/>
            <item
                android:id="@+id/submenu_2"
                android:showAsAction="always"
                android:title="submenu 2"/>
        </menu>
    </item>

</menu>
like image 148
Benito Bertoli Avatar answered Dec 03 '25 07:12

Benito Bertoli



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!