Es ist leider nicht möglich, in einfachem XML, aber es gibt einen schönen Weg, ohne manuelle Menu.add*
Methoden: So können Sie eine Menu
Instanz, in die die andere Datei einzuschließen/einzublenden ist:
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 />
Sie können den obigen Code in jede der folgenden Zeilen einfügen, indem Sie die angegebene inflater
:
Activity.onCreateContextMenu(menu, v, menuInfo)
: getMenuInflater()
Fragment.onCreateContextMenu(menu, v, menuInfo)
: getActivity().getMenuInflater()
Activity.onCreateOptionsMenu(menu)
: getMenuInflater()
Fragment.onCreateOptionsMenu(menu, inflater)
: inflater
menü/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>
Die leere <menu />
Platzhalter ist sehr wichtig , ohne diese getSubMenu()
wird sein null
!
menü/stellungen.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>
Anmerkung zu Ihrem onContextItemSelected
Idee
Ich denke, Sie blasen es in der onContextItemSelected
Methode [...]
Ich denke, es ist zu spät, wenn Sie in onContextItemSelected
da Sie bereits das Ereignis behandeln, das dazu führen würde, dass das Untermenü angezeigt wird, das noch nicht aufgeblasen ist. Sie könnten versuchen, das gleiche inflate in getSubMenu()
aber ich bin mir nicht sicher, ob es auftauchen wird. Am besten ist es, das Menü dort zu erstellen, wo es erstellt werden soll.
Hinweis zur mehrfachen Aufnahme desselben Untermenüs in dasselbe Menü
Ungetestet Wenn Sie dasselbe aufblasen müssen positions.xml
in teameditor_assignbattingposition
haben Sie auch einige Probleme in onOptionsItemSelected
/ onContextItemSelected
. Eine Möglichkeit, dieses Problem zu umgehen, ist die Konvertierung der findItem
auf ein Feld und speichern Sie den Verweis auf beide
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());
und dann in 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();