2015-10-13 80 views
2

我在有幾個片段的活動中使用drawerlayout。通過點擊導航項目,我切換片段是這樣的:Android:onCreateOptionsMenu被調用,但操作欄菜單沒有更新片段

switch (index) { 
      case 0: 
       if (checkinFragment == null) { 
        checkinFragment = new CheckinFragment(); 
        ft.add(R.id.main_container, checkinFragment, "0"); 
       } else { 
        ft.show(checkinFragment); 
       } 

       break; 
      case 3: 
       if (jianGuanFragment == null) { 
        jianGuanFragment = new JianGuanFragment(); 
        ft.add(R.id.main_container, jianGuanFragment, "3"); 
       } else { 
        ft.show(jianGuanFragment); 
       } 

       break; 
     } 

     ft.commitAllowingStateLoss(); 

每個片段在其onCreateOptionsMenu(Menu menu, MenuInflater inflater)方法膨脹不同的菜單資源文件。

步驟:a。
1.當第一次進入在checkinFragment菜單中示出了活性(好)
2.然後切換到jianGuanFragment,在jianGuanFragment菜單被顯示(此外右)
3.但是,切換回第一個片段(checkinFragment)時,操作欄菜單不會更新。展示菜單仍然是jianGuanFragment中的菜單。那就是問題所在。

而從日誌中我知道onCreateOptionsMenu在顯示片段中被稱爲每次我切換到它。也就是說:

onCreateOptionsMenu被調用,但不更新操作欄菜單。

任何人都可以幫到我嗎?非常感謝。

EDIT 1:添加代碼在onCreateOptionsMenu:
(1)在checkinFragment

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 

     LogUtils.e("TAG", "CheckinFragment onCreateOptionsMenu"); 
     menu.clear(); 
     inflater.inflate(R.menu.menu_setting, menu); 
    } 

(2)在jianGuanFragment

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 

     LogUtils.e("TAG", "JianGuanFragment onCreateOptionsMenu"); 
     menu.clear(); 
     inflater.inflate(R.menu.menu_jianguan, menu); 
    } 

編輯2:我使用工具欄上,沒有舊的操作欄。

+0

@ unrealsoul007我已經在每個片段的'onActivityCreated'中設置了setHasOptionsMenu(true)。我已經嘗試將它寫入片段的onCreateOptionsMenu中,但它不起作用。 – hanswim

+0

你可以嘗試使用onPrepareOptionsMenu()在片段 – Raghavendra

回答

0

使用invalidateOptionsMenu()。您需要在需要致電OnCreateOptionsMenu()的地方使用它。

編輯: getActivity().invalidateOptionsMenu()可以,如果你想從Fragment調用它使用。

希望有幫助!

+0

invalidateOptionsMenu()不可用在片段我猜..? – Raghavendra

+0

無論是否使用invalidateOptionsMenu(),都會調用當前片段中的onCreateOptionsMenu()。問題是即使操作欄菜單沒有更新。 – hanswim

+0

Raghavendra代碼編輯。 –

0

在checkinFragment

@Override 
    public void onPrepareOptionsMenu(Menu menu) { 
     menu.clear(); 
     LogUtils.e("TAG", "CheckinFragment onCreateOptionsMenu"); 
     getActivity().getMenuInflater().inflate(R.menu.menu_setting, menu); 
     super.onPrepareOptionsMenu(menu); 
    } 
+0

它沒有爲我工作。 – hanswim

0

最後試試這個 1)我找到了解決辦法:

每次進入一個片段,再重新設置工具欄爲ationbar。

@Override 
public void onHiddenChanged(boolean hidden) { 
    super.onHiddenChanged(hidden); 

    if (!hidden) { 
     AppCompatActivity compatActivity = (AppCompatActivity) mActivity; 
     mToolbar = (Toolbar) compatActivity.findViewById(toolbarId); 
     compatActivity.setSupportActionBar(mToolbar); 
    } 
} 
相關問題