通过通货膨胀更新菜单

时间:2012-11-01 14:11:20

标签: android android-optionsmenu

在我的应用程序中,我管理选项菜单以反映我的应用程序所处的状态。可能有三个菜单。

onCreateOptionsMenu函数中,我从XML文件中扩充基本条目。

onPrepareOptionsMenu函数中,我清除菜单,然后膨胀与我的应用程序的当前状态相对应的XML文件。

这会导致意想不到的结果!!!

当我将菜单从状态1更改为状态2然后恢复到状态1时,“更多”条目在视觉上被我的菜单中的一个条目替换。但它的功能是正确的:如果我点击它,就会出现溢出菜单!

然后,如果我更改为状态3,当我尝试打开它时,不会显示任何菜单。如果我调试代码,我看到菜单正确填充了膨胀的结果(菜单的大小也相应地改变了)。

我可以补充一点,代码与Android 2.3.3完美配合。问题只发生在我在Android 4上执行时(未经Android 3测试)。

有什么想法吗?

根据要求,我简化了我的代码,让您看到问题所在。 该应用程序的代码如下:

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);
        }
    }
}

}

只有四个菜单条目处于活动状态:1.11从menu_1更改为menu_2,2.1恢复为menu_1; 1.2从menu_1到menu_3和3.3的更改将恢复为menu_1。

到目前为止遇到的问题: 1)点击1.11更改menu_2。打开菜单:仅显示5个菜单项。关闭菜单并重新打开:现在可以正确显示6个菜单项。 2)单击2.1返回菜单1.在第六个位置,您可以看到“2.6”而不是“更多”。如果单击“2.6”,则行为对应于单击“更多”。

现在,菜单的XML文件: menu_1:

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

<item android:id="@+menu/m1_1"
      android:title="1.1">
</item>

<item android:id="@+menu/m1_2"
      android:title="1.2">
</item>

<item android:id="@+menu/m1_3"
      android:title="1.3">
</item>

<item android:id="@+menu/m1_4"
      android:title="1.4">
</item>

<item android:id="@+menu/m1_5"
      android:title="1.5"
      android:checkable="true">
</item>

<item android:id="@+menu/m1_6"
      android:title="1.6"
      android:checkable="true">
</item>

<item android:id="@+menu/m1_7"
      android:title="1.7"
      android:checkable="true">
</item>

<item android:id="@+menu/m1_8"
      android:title="1.8"
      android:checkable="true">
</item>

<item android:id="@+menu/m1_9"
      android:title="1.9"
      android:enabled="false"
      android:visible="false"
      android:checkable="true">
</item>

<item android:id="@+menu/m1_10"
      android:title="1.10">
</item>

<item android:id="@+menu/m1_11"
      android:title="1.11">
</item>

<item android:id="@+menu/m1_12"
      android:title="1.12">
</item>

<item android:id="@+menu/m1_13"
      android:title="1.13">
</item>

<item android:id="@+menu/m1_14"
    android:title="1.14">
</item>

<item android:id="@+menu/Options"
    android:title="1.15">
</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>

和menu_3:

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

0 个答案:

没有答案