![](/img/trans.png)
[英]Android onCreateOptionsMenu is never called so the menu isn't being displayed
[英]Android: onCreateOptionsMenu is called but actionbar menu isn't updated in fragment
我在有幾個片段的活動中使用drawerlayout
。 通過單擊導航項,我以這種方式切換片段:
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)
方法中都有一個不同的菜單資源文件。
腳步:
1.首次進入活動時,顯示checkinFragment
的菜單。(所有)
2.然后切換到jianGuanFragment
,在菜單jianGuanFragment
被示出。(另外右)
3.但是,當切換回第一個片段( checkinFragment
)時,操作欄菜單不會更新。 顯示的菜單仍然是jianGuanFragment
菜單。 那就是問題所在。
從日志中,我知道每次切換到該片段時都會調用該顯示片段中的onCreateOptionsMenu
。 就是說:
會調用onCreateOptionsMenu,但不會更新操作欄菜單。
有人可以幫助我嗎? 非常感謝。
編輯1:在onCreateOptionsMenu中添加代碼:
(1)在檢入片段中
@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)在劍管碎片中
@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:我使用工具欄,而不是舊的動作欄。
使用invalidateOptionsMenu()
。 您需要在需要調用OnCreateOptionsMenu()
地方使用它。
編輯:如果要從Fragment
調用getActivity().invalidateOptionsMenu()
則可以使用它。
希望有幫助!!!
在checkinFragment中嘗試1)
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.clear();
LogUtils.e("TAG", "CheckinFragment onCreateOptionsMenu");
getActivity().getMenuInflater().inflate(R.menu.menu_setting, menu);
super.onPrepareOptionsMenu(menu);
}
最后我找到了解決方案:
每次輸入片段時,再次將工具欄重新設置為ationbar。
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (!hidden) {
AppCompatActivity compatActivity = (AppCompatActivity) mActivity;
mToolbar = (Toolbar) compatActivity.findViewById(toolbarId);
compatActivity.setSupportActionBar(mToolbar);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.