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

发布于 2024-11-29 21:09:57 字数 914 浏览 1 评论 0原文

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

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

I want to add a submenu to an existing submenu with this 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>

I am getting but this exception:

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

I do not understand what I am doing wrong - can anybody give me some advice?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

诗酒趁年少 2024-12-06 21:09:58

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

This appears to be natively supported from Android API level 15. On earlier versions, a workaround is to redirect menu calls. Using your xml example, change it so that the sub-sub-menu is a regular hidden menu item, and add a redirect place holder item instead:

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

Hang on to the inflated Menu mOptionsMenu created in onCreateOptionsMenu( Menu menu ) and open the sub-menu from your redirect like this:

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

Note the call to performIdentifierAction is posted from a View to the UI message queue. On old versions of Android it can be called immediately, but on newer versions it needs to be a separate message to work.

够运 2024-12-06 21:09:58

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

Well, apparently this is not supported. You'll have to redesign your menu.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文