android如何在子菜单中放置子菜单

时间:2011-08-15 08:25:48

标签: android submenu

我想使用此xml:

将子菜单添加到现有子菜单
<item android:id="@+id/chooseCountry" android:title="Choose Country">
    <menu>
        <item android:id="@+id/india" android:title="India" >
            <menu>
                <item android:id="@+id/blor" android:title="Bangalore" />
                <item android:id="@+id/delhi" android:title="Delhi" />
                <item android:id="@+id/hyd" android:title="Hyderabad" />
            </menu>
        </item>
        <item android:id="@+id/pak" android:title="Pakistan" />
        <item android:id="@+id/africa" android:title="South Africa" />
    </menu>
</item>

我得到了这个例外:

08-15 12:57:50.942: ERROR/AndroidRuntime(312): java.lang.UnsupportedOperationException: Attempt to add a sub-menu to a sub-menu.

我不明白我做错了什么 - 有人可以给我一些建议吗?

2 个答案:

答案 0 :(得分:3)

这似乎是从Android API级别15本机支持的。在早期版本中,解决方法是重定向菜单调用。使用您的xml示例进行更改,以便子子菜单是常规隐藏菜单项,并添加重定向占位符项:

<item android:id="@+id/india" android:title="India" android:visible="false">
    <menu>
        <item android:id="@+id/blor" android:title="Bangalore" />
        <item android:id="@+id/delhi" android:title="Delhi" />
        <item android:id="@+id/hyd" android:title="Hyderabad" />
    </menu>
</item>


<item android:id="@+id/chooseCountry" android:title="Choose Country">
<menu>
    <item android:id="@+id/india_redirect" android:title="India" />
    <item android:id="@+id/pak" android:title="Pakistan" />
    <item android:id="@+id/africa" android:title="South Africa" />
</menu>

继续查看Menu mOptionsMenu中创建的虚增onCreateOptionsMenu( Menu menu ),然后从您的重定向打开子菜单,如下所示:

@Override
public boolean onMenuItemSelected( int id, MenuItem item) 
{
    switch ( item.getItemId() ) 
    {
      case R.id.india_redirect:
        mSomeView.post( new Runnable()
        {
            public void run()
            {
                mOptionsMenu.performIdentifierAction( R.id.india, 0 );                  
            }
        } );

        return true;
    }

    return super.onMenuItemSelected( id, item );
}

请注意,对performIdentifierAction的调用是从View发布到UI消息队列的。在旧版本的Android上,它可以立即调用,但在较新的版本上,它需要是一个单独的消息才能工作。

答案 1 :(得分:1)

嗯,显然这不受支持。你必须重新设计你的菜单。