2013-10-31 47 views
0

我有一個主要的SherlockFragmentActivity顯示actionbarsherlock只有一個菜單項(「完成」)。我在執行這個菜單,自定義視圖:Monodroid ActionBarSherlock OnCreateOptionsMenu不叫

<?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搜索,但大多數的問題和解決方案,我發現是關於菜單項點擊事件從片段沒有被調用。我的情況實際上是這個事件在主要活動中不叫。我看不到我做錯了什麼。 任何提示或幫助將不勝感激。 謝謝

編輯

在我OnCreateOptionsMenu,我加了這樣的菜單(用於測試目的):

menu.AddSubMenu("Test"); 

對於這個特殊的菜單,這似乎是一個下拉菜單從右上角的3點菜單中,OnOptionsItemSelected被正常調用。所以我認爲可能會出現錯誤的xml,我膨脹顯示菜單。

回答

0

我終於找到了解決方案。由於我將視圖充氣爲菜單項,因此當點擊菜單時,我必須小心自己提供一個處理程序。這裏是我所做的:

    SupportMenuInflater.Inflate(Resource.Layout.menu_done, menu); 

        ActionBar_Sherlock.View.IMenuItem item = menu.FindItem(Resource.Id.action_menu_done); 

        LinearLayout layout = item.ActionView.FindViewById<LinearLayout>(Resource.Id.menu_container); 

        layout.Click +=new EventHandler(layout_Click); 

Resource.Id.menu_container是在我的充氣視圖中定義的LinearLayout。它是可點擊的。所以我爲它的click事件提供了一個處理程序。這是我解決我的問題的方式。還有其他更優雅的解決方案嗎?