7

我無法讓onPrepareOptionsMenu()正常工作。無論我嘗試什麼,我都無法調用它。onPrepareOptionsMenu不叫

我的應用程序的體系結構如下所示:我的主Activity包含一個保存ViewPager的Fragment,而ViewPager又具有四個子Fragment實例。目前,我(成功)在活動中使用onCreateOptionsMenu()填充了初始選項菜單,但是我希望添加一些對應於每個活動子Fragment的額外選項。

在我的孩子片段中,我確認setHasOptionsMenu(true)被調用onCreate()而被調用onActivityCreated()。在主活動中,onCreateOptionsMenu()在兒童碎片被實例化後調用一次,不管它們是否包含supportInvalidateOptionsMenu()。隨後在傳呼機中的碎片被替換時再次調用它。

我已經嘗試將onPrepareOptionsMenu()代碼向上級別移動到父級片段和主活動 - 無濟於事,這表明問題與我使用嵌套片段無關。我也嘗試將主要Activity中的onCreateOptionsMenu()方法向下移動到兩個片段,它們在那裏不被調用。

如果有人知道這裏發生了什麼,我會非常感激,因爲我已經堅持了兩天了。

更新 - 我已經研究出了現在的問題,只是我還不確定如何解決它。我正在測試4.2版本,看起來onCreateOptionsMenu()是在onResume()之後的Activity中調用的 - 如onCreateOptionsMenu called after onResume on JB 4.2所示。我認爲這意味着片段不能調用onPrepareOptionsMenu(),因爲直到它們被實例化之後菜單才存在。那麼我該如何解決這個問題?

回答

4

這是,有些不可避免地,與ActionBarSherlock的問題,我忽略了檢查其在github上的問題頁面。基本上,嵌套片段中選項菜單的功能尚未添加,請參閱:https://github.com/JakeWharton/ActionBarSherlock/issues/828。我現在的解決方案是用註釋中的修改文件之一替換Watson.java。

+2

你爲我節省了一天的工作時間,一直在敲我的腦袋 – slinden77

+0

@dmmh爲這個問題找到了正確的解決方案? –

+0

這是在我的評論:) – slinden77