Android: How to include the xml menu in another xml menu?

Simple question.

I have a menu of children:

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

    <item
        android:id="@+id/fp_pitcher"
        android:title="Pitcher">
    </item>
    <item
        android:id="@+id/fp_catcher"
        android:title="Catcher">
    </item>
<!-- SNIP ---> 
</menu>

And later, I would like to include it as a submenu of this menu:

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


    <item
        android:id="@+id/teameditor_remove"
        android:title="Remove Player from Team">
    </item>

    <item
        android:id="@+id/teameditor_assignbattingposition"
        android:title="Assign Batting Position">
    </item>

    <item
        android:id="@+id/teameditor_assignfieldingposition"
        android:title="Assign Feilding Position">
        <!-- I want to include the submenu here-->
    </item>

</menu>

The question here answered this - I'm not sure how to inflate the submenu.

I think you are inflating it in the onContextItemSelected method, but to inflate you need a menu object that is not passed to onContextItemSelected.

+5
source share
2 answers

This, unfortunately, is not possible in simple XML, but there is a good way without using manual methods Menu.add*: here is how you can get an instance Menuto include / bloat another file in:

inflater.inflate(R.menu.player, menu);
MenuItem fp_menu = menu.findItem(R.id.teameditor_assignfieldingposition);
inflater.inflate(R.menu.positions, fp_menu.getSubMenu()); // needs <menu />

, inflater:

  • Activity.onCreateContextMenu(menu, v, menuInfo): getMenuInflater()
  • Fragment.onCreateContextMenu(menu, v, menuInfo): getActivity().getMenuInflater()
  • Activity.onCreateOptionsMenu(menu): getMenuInflater()
  • Fragment.onCreateOptionsMenu(menu, inflater): inflater

/player.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/teameditor_remove"
          android:title="Remove Player from Team"
    />
    <item android:id="@+id/teameditor_assignbattingposition"
          android:title="Assign Batting Position"
    />
    <item android:id="@+id/teameditor_assignfieldingposition"
          android:title="Assign Feilding Position">
        <menu><!-- include: positions.xml --></menu>
    </item>
</menu>

<menu /> , getSubMenu() null!

/positions.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/fp_pitcher"
          android:title="Pitcher"
    />
    <item android:id="@+id/fp_catcher"
          android:title="Catcher"
    />
    <!-- SNIP ---> 
</menu>

onContextItemSelected

, onContextItemSelected [...]

, , onContextItemSelected, , ... . getSubMenu(), , . , .

positions.xml teameditor_assignbattingposition, onOptionsItemSelected/onContextItemSelected. - findItem

this.fp_menu = menu.findItem(R.id.teameditor_assignfieldingposition);
inflater.inflate(R.menu.positions, fp_menu.getSubMenu());
this.bp_menu = menu.findItem(R.id.teameditor_assignbattingposition);
inflater.inflate(R.menu.positions, bp_menu.getSubMenu());

on*ItemSelected:

switch (item.getItemId()) {
    case R.id.fp_pitcher:
        if (item == fp_menu.findItem(R.id.fp_pitcher)) {
            // selected inside teameditor_assignfieldingposition
        } else if (item == bp_menu.findItem(R.id.fp_picther)) {
            // selected inside teameditor_assignbattingposition
        } else {
            throw new ImLostInMenusException();
        }
        return true;
}
return super.on*ItemSelected();
+3

, , XML ( ). , menu.findItem(R.id.teameditor_assignfieldingposition).getSubMenu().add(...) , . ( "" "" ) String, , , . , , XML-, , , , size() getItem(int).

Menu, size() getItem(int), MenuItem. add(menuItem.getGroupId(), menuItem.getItemId(), menuItem.getOrder(), menuItem.getTitle()) getSubMenu() findItem(R.id.teameditor_assignfieldingposition). . , XML, , XML , XML <include>. , , ( onCreateOptionsMenu(...)), onPrepareOptionsMenu(...) ( , onCreateOptionsMenu(...)). , onCreateOptionsMenu(...), , onPrepareOptionsMenu(...).

, - , , .

0

All Articles