4

我想用这个 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.

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

4

2 回答 2

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>

挂在 inflatedMenu 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从 a 发布View到 UI 消息队列。在旧版本的 Android 上,它可以立即调用,但在较新的版本上,它需要单独的消息才能工作。

于 2013-06-11T09:38:25.997 回答
1

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

于 2011-08-15T08:38:23.100 回答