2016-12-28 83 views
0

在我的片段中,我只想在橫向模式下在我的工具欄中顯示我的Menu/MenuItems。當我改變方向時,我注意到onCreateOptionsMenuonPrepareOptionsMenu未被調用。onCreateOptionsMenu和onPrepareOptionsMenu不調用方向更改

換句話說,我用我的菜單項目景觀佈局只能當我在橫向模式下啓動,而不是在(從縱向改爲橫向時崩潰),我嘗試變化爲橫向模式。

public class MyFragment extends Fragment 
{ 
    private int orientation; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     orientation = getResources().getConfiguration().orientation; 
     if (orientation == Configuration.ORIENTATION_LANDSCAPE) 
      setHasOptionsMenu(true); 

     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
     if (orientation == Configuration.ORIENTATION_LANDSCAPE) 
      inflater.inflate(R.menu.my_menu, menu); 

     super.onCreateOptionsMenu(menu, inflater); 
    } 

    @Override 
    public void onPrepareOptionsMenu(Menu menu) 
    { 
     initializeLandscapeMenuViews(menu); 
     super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) 
    { 
     super.onViewCreated(view, savedInstanceState);   
     if (orientation == Configuration.ORIENTATION_PORTRAIT) 
      initializePortraitMenuViews(view); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     return inflater.inflate(R.layout.my_layout, container, false); 
    } 

// other code not shown 
} 

崩潰,當我試圖訪問我initializeLandscapeMenuViews()初始化,因爲onPrepareOptionsMenu()不會被調用的看法發生。

我檢查使用調試器中調用的順序:

在橫向模式下啓動

  1. onCreate
  2. onViewCreated
  3. onCreateOptionsMenu
  4. onPrepareOptionsMenu

然後,方向改變爲縱向

  1. onCreate
  2. onViewCreated

然後,方向變回景觀

  1. onCreate
  2. onViewCreated

onCreateOptionsMenuonPrepareOptionsMenu不叫

我缺少什麼? (任何幫助表示讚賞)。

回答

0

基本上我沒有看到你的方法有任何問題。不過,你有沒有嘗試過調用invalidateOptionsMenu()? 它假設通過調用onCreateOptionsMenu()告訴操作系統你想重畫你的菜單。

+0

嗨@Idanatz,我確實嘗試過,但這些回調沒有被調用:( – Vinnie

-1

編輯:我以爲TS是與活動一起工作,但他正在使用片段。抱歉。

如果您正在處理活動:onCreateOptionsMenuonPrepareOptionsMenu有一個布爾返回值。所以,你需要返回一個布爾值(而不是void)。在你目前的方法中,你不會因爲這個而重寫函數。這就是爲什麼看起來這些功能從未被調用。 欲瞭解更多信息,請參閱API

+0

請仔細閱讀問題。我擴展了'Fragment',而不是'Activity'。 – Vinnie

+0

你說得對,我錯過了那部分。抱歉。 – Richh94

相關問題