2011-08-15 27 views
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. 

我不瞭解我做錯了什麼 - 任何人都可以給我一些建議嗎?

回答

1

好吧,顯然這不被支持。你將不得不重新設計你的菜單。

+0

但是如何? Plz給我任何想法。 – Jyosna

+0

上面的莫恩解決方案工作正常,我建議你試試看。我正在使用minSdkVersion 5並解決了問題。 –

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

注意調用performIdentifierActionView張貼到UI消息隊列。在Android的舊版本中,可以立即調用它,但是在較新的版本中,它需要成爲單獨的消息才能工作。