私はメインの SherlockFragmentActivity を持っています。これは actionbarsherlock を 1 つのメニュー項目 (「完了」) だけで表示します。カスタムビューでこのメニューを実装しています:
<?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 activity で呼び出されていないということです。私は自分が間違っていることを見ることができません。ヒントやヘルプをいただければ幸いです。ありがとうございました
編集
OnCreateOptionsMenu に、次のようなメニューを追加しました (テスト目的で):
menu.AddSubMenu( "Test" );
右上隅の 3 ドット メニューからドロップダウン メニューとして表示されるこの特定のメニューでは、通常、OnOptionsItemSelected が呼び出されます。そのため、メニューを表示するためにインフレートするxmlに問題がある可能性があると思います。