我在活动中使用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)在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)in 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 :(得分:0)
使用invalidateOptionsMenu()
。您需要在需要调用OnCreateOptionsMenu()
的地方使用它。
修改强>
如果您想从getActivity().invalidateOptionsMenu()
拨打电话,可以使用Fragment
。
希望有所帮助!!!
答案 1 :(得分:0)
试试这个 1)在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);
}
答案 2 :(得分:0)
最后我找到了解决方案:
每次输入片段时,再次将工具栏重新设置为ationbar。
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (!hidden) {
AppCompatActivity compatActivity = (AppCompatActivity) mActivity;
mToolbar = (Toolbar) compatActivity.findViewById(toolbarId);
compatActivity.setSupportActionBar(mToolbar);
}
}