安卓如何将子菜单放在子菜单中

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>

我正在遇到以下异常:

Exception

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

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

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>

onCreateOptionsMenu( Menu menu ) 中创建充气式菜单 Menu mOptionsMenu,并在重定向时打开子菜单:

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

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

1

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


但是怎么做呢?请给我任何想法。 - Jyosna
Morne的解决方案很好,我建议你试一下。我正在使用minSdkVersion 5,这个解决方案可行。 - A. Masson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接