Android 通过通货膨胀更新菜单
在我的应用程序中,我管理选项菜单以反映我的应用程序所处的状态。三个菜单是可能的Android 通过通货膨胀更新菜单,android,android-optionsmenu,Android,Android Optionsmenu,在我的应用程序中,我管理选项菜单以反映我的应用程序所处的状态。三个菜单是可能的 <item android:id="@+menu/m2_2" android:title="2.2"> </item> <item android:id="@+menu/m2_3" android:title="2.3"> </item> <item android:id="@+menu/m2_4" android
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
在oncreateoptions菜单
函数中,我从XML文件中膨胀基本条目
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
在onPrepareOptionsMenu
函数中,我清除菜单,然后膨胀对应于应用程序当前状态的XML文件
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
这会导致意想不到的结果
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
当我将菜单从状态1更改为状态2,然后恢复到状态1时,“更多”条目将被我菜单的一个条目直观地替换。但它的功能是正确的:如果我点击它,溢出菜单出现
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
然后,如果我更改为状态3,当我尝试打开它时,不会出现菜单。如果我调试代码,我会看到菜单正确地填充了膨胀的结果(菜单的大小会相应地改变)
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
我可以补充说,该代码与Android 2.3.3完美配合。这个问题只有在我在Android 4上执行时才会出现(没有在Android 3上测试)
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
有什么想法吗
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
根据要求,我简化了代码,让您看到问题所在。
申请的代码如下:
public class MainActivity extends Activity{
private boolean m2=false,m3=false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflateur;
inflateur = getMenuInflater();
inflateur.inflate(R.menu.menu_1,menu);
return (true);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflateur;
inflateur = getMenuInflater();
menu.clear();
if (m2){
inflateur.inflate(R.menu.menu_2,menu);
} else {
if(m3) {
inflateur.inflate(R.menu.menu_3, menu);
} else {
inflateur.inflate(R.menu.menu_1, menu);
}
}
return (true);
}
@Override
public boolean onOptionsItemSelected(MenuItem entréeMenu) {
switch (entréeMenu.getItemId()) {
case R.menu.m1_4: {
return true;
}
case R.menu.m1_5: {
return true;
}
case R.menu.m1_7: {
return true;
}
case R.menu.m1_8: {
return true;
}
case R.menu.m1_10: {
return true;
}
case R.menu.m1_12: {
return (true);
}
case R.menu.m1_13: {
return (true);
}
case R.menu.m1_1: {
return true;
}
case R.menu.m1_11: {
// change for menu_2
m2=true;
m3=false;
return true;
}
case R.menu.m3_1: {
return true;
}
case R.menu.m3_2: {
return true;
}
case R.menu.m2_1: {
// revert to menu_1
m2=false;
return true;
}
case R.menu.m2_2: {
return true;
}
case R.menu.m1_2: {
// change for menu_3
m2=false;
m3=true;
return true;
}
case R.menu.m1_3: {
return true;
}
case R.menu.m3_3: {
// revert to menu_1
m3=false;
return true;
}
case R.menu.m2_5: {
return true;
}
case R.menu.m2_3: {
return true;
}
case R.menu.m2_4: {
return true;
}
case R.menu.m1_6: {
return (true);
}
case R.menu.Options: {
return (true);
}
case R.menu.m1_14:{
return(true);
}
default: {
return super.onOptionsItemSelected(entréeMenu);
}
}
}
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
}
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
只有四个菜单项处于活动状态:1.11从菜单1更改为菜单2,2.1恢复为菜单1;1.2从菜单_1更改为菜单_3,3.3恢复为菜单_1
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
到目前为止遇到的问题:
1) 单击1.11更改菜单2。打开菜单:仅显示5个菜单项。关闭菜单并重新打开:6个菜单项现在已正确显示。
2) 单击2.1返回菜单1。在第六个位置,您可以看到“2.6”而不是“更多”。如果单击“2.6”,则该行为对应于单击“更多”
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
现在,菜单的XML文件:
菜单1:
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
菜单2:
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
和菜单3:
<item android:id="@+menu/m2_2"
android:title="2.2">
</item>
<item android:id="@+menu/m2_3"
android:title="2.3">
</item>
<item android:id="@+menu/m2_4"
android:title="2.4">
</item>
<item android:id="@+menu/m2_5"
android:title="2.5">
</item>
<item android:id="@+menu/Options"
android:title="2.6">
</item>
</menu>
<?xml version="1.0" encoding="UTF-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+menu/m3_1"
android:title="3.1">
</item>
<item android:id="@+menu/m3_2"
android:title="3.2">
</item>
<item android:id="@+menu/m3_3"
android:title="3.3">
</item>
<item android:id="@+menu/m1_4"
android:title="3.4">
</item>
<item android:id="@+menu/Options"
android:title="3.5">
</item>
</menu>
发布一些代码怎么样?没有人知道你的“更多”条目可能是什么……这个“更多”条目不是我的。当菜单包含六个以上项目时,它是系统置于第六位置的条目。