Android:onCreateOptionsMenu被调用,但操作栏菜单没有更新片段
我在有几个片段的活动中使用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:我使用工具栏上,没有旧的操作栏。
使用invalidateOptionsMenu()
。您需要在需要致电OnCreateOptionsMenu()
的地方使用它。
编辑: getActivity().invalidateOptionsMenu()
可以,如果你想从Fragment
调用它使用。
希望有帮助!
invalidateOptionsMenu()不可用在片段我猜..? – Raghavendra
无论是否使用invalidateOptionsMenu(),都会调用当前片段中的onCreateOptionsMenu()。问题是即使操作栏菜单没有更新。 – hanswim
Raghavendra代码编辑。 –
在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);
}
它没有为我工作。 – hanswim
最后试试这个 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);
}
}
@ unrealsoul007我已经在每个片段的'onActivityCreated'中设置了setHasOptionsMenu(true)。我已经尝试将它写入片段的onCreateOptionsMenu中,但它不起作用。 – hanswim
你可以尝试使用onPrepareOptionsMenu()在片段 – Raghavendra