gpt4 book ai didi

Android:如何在另一个菜单 xml 中包含一个菜单 xml?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:12:36 26 4
gpt4 key购买 nike

简单的问题。

我有我的子项菜单:

<?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>

稍后我想将它作为此菜单的子菜单包括在内:

<?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有点回答了这个 - 我不确定如何膨胀子菜单。

我认为您在 onContextItemSelected 方法中对其进行扩充 - 但扩充需要一个菜单​​对象,该对象未传递到 onContextItemSelected。

最佳答案

遗憾的是,这在纯 XML 中是不可能的,但有一种不使用手册的好方法 Menu.add*方法:这里是你如何获得一个Menu将另一个文件包含/膨胀到的实例:

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想法

I'm thinking that you inflate it in the onContextItemSelected method [...]

如果你在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();

关于Android:如何在另一个菜单 xml 中包含一个菜单 xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11443201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com