我想使用此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.
我不明白我做错了什么 - 有人可以给我一些建议吗?
答案 0 :(得分: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 );
}
请注意,对performIdentifierAction
的调用是从View
发布到UI消息队列的。在旧版本的Android上,它可以立即调用,但在较新的版本上,它需要是一个单独的消息才能工作。
答案 1 :(得分:1)
嗯,显然这不受支持。你必须重新设计你的菜单。