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

标签 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.

我不明白我做错了什么 - 谁能给我一些建议?

最佳答案

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

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

关于android如何在子菜单中放置子菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7062926/

相关文章:

android - 从布局 xml 绘制 SurfaceView

Android:如何为 Activity 设置onTouch事件?

android - 如何增加 Android dumpsys gfxinfo 可以记录的帧数?

Android通过发件人姓名查询短信收件箱

Android 从一个按钮打开菜单

javascript - 如何消除子导航重叠?

html - 子菜单一直隐藏在将鼠标从菜单移动到子菜单时

android - 在 Android Java 中将 Pdf 页面转换为位图

javascript - 标签允许用户输入

javascript - 子菜单的 Jquery 脚本,我该如何修复它?