我有一个主 SherlockFragmentActivity,它只显示一个菜单项(“完成”)的 actionbarsherlock。我正在使用自定义视图实现此菜单:
<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_menu_done"
android:icon="@drawable/checkmark"
android:title="Done"
android:showAsAction="always|withText"
android:actionLayout="@layout/menu_done_extended" />
</menu>
这里是 menu_done_extended.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_container"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="14dp"
android:paddingBottom="14dp"
android:gravity="center"
android:text="Done"
android:drawableLeft="@drawable/checkmark"
android:background="@drawable/selectable_background_zando_theme_red"
android:clickable="true" />
<View
android:layout_width="20dp"
android:layout_height="wrap_content" />
</LinearLayout>
在我的活动中,我重写 OnCreateOptionsMenu 以显示此菜单:
public override bool OnCreateOptionsMenu( ActionBar_Sherlock.View.IMenu menu )
{
SupportMenuInflater.Inflate( Resource.Layout.menu_done, menu );
return true;
}
最后我重写 OnOptionsItemSelected (在主要活动中)来处理菜单点击事件。
public override bool OnOptionsItemSelected( ActionBar_Sherlock.View.IMenuItem item )
{
switch( item.ItemId )
{
case Resource.Id.action_menu_done:
{
// do some job....
return true;
}
break;
}
return base.OnOptionsItemSelected( item );
}
但是当我单击菜单项时,永远不会调用 OnOptionsItemSelected。我指出我的主要活动承载了一个片段。但是这个片段不会修改主菜单(没有覆盖从片段调用的 OnCreateOptionsMenu 或 OnOptionsItemSelected)。我在stackoverflow上搜索了互联网,但我发现的大多数问题和解决方案都是关于未调用片段的菜单项单击事件。我的情况实际上是在 main 活动中没有调用此事件。我看不出我做错了什么。任何提示或帮助将不胜感激。谢谢
编辑
在我的 OnCreateOptionsMenu 中,我添加了这样的菜单(用于测试目的):
menu.AddSubMenu( "Test" );
对于这个从右上角的 3 点菜单中显示为下拉菜单的特定菜单,通常会调用 OnOptionsItemSelected。所以我认为我为显示菜单而膨胀的 xml 可能有问题。