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>

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

への呼び出しがからUI メッセージ キューにperformIdentifierActionポストされることに注意してください。View古いバージョンの Android ではすぐに呼び出すことができますが、新しいバージョンでは別のメッセージで機能させる必要があります。

于 2013-06-11T09:38:25.997 に答える
1

まあ、どうやらこれはサポートされていません。メニューを再設計する必要があります。

于 2011-08-15T08:38:23.100 に答える