我现在正在用这个挠我的脑袋....我有一个ActionBarActivity
加载一个初始Fragment
- 原始菜单在活动内膨胀。现在,我有一个导航栏,当选择一个项目时,加载一个不同的片段并将其添加到后台堆栈中。与片段/工具栏返回导航
当我做到这一点,有一对夫妇的事情,我想设置:
- 将家里高达指标
- 从主要活动
- 设置有选项无效选项菜单真实的片段
- 确保了指标正确导航回原来的片段
Someth比较奇怪的是正在进行 - 向上指示符只出现一次,并不像后退按钮一样,尽管我已经使新菜单失效并使其充满,但新菜单将附加到到原始活动菜单。
编辑:好的我解决了附加问题 - 忘记在onCreateOptionsMenu
方法中添加menu.clear()
。
我的抽屉式导航栏布局有onClick
方法,所有菜单项可能会触发另一片段的负载:
public void navItemClick(View view) {
switch (view.getId()) {
case R.id.ripSMS:
mNavigationDrawer.toggleHome(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
FragmentTransaction mTrans = getSupportFragmentManager().beginTransaction();
mTrans.replace(R.id.voiceover_frame_layout,new MessageFragment(),"main_ui")
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack("msg").commit();
break;
case R.id.ripEmail:
break;
case R.id.ripSettings:
break;
}
mNavigationDrawer.closeDrawer();
}
toggleHome:
public void toggleHome(boolean show) {
mDrawerToggle.setDrawerIndicatorEnabled(show);
if (!show) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
} else {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
}
一旦项目被触发onCreate
含有无效和hasOptions代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().invalidateOptionsMenu();
setHasOptionsMenu(true);
}
onCreateOptionsMenu
然后膨胀另一个菜单布局(包含一个称为设置的单个项目)。
如上所述,这只是部分工作一次 - 我第一次使用该项目来加载片段,我得到后面的图标,但它也不工作(这是设置在onOptionsItemSelected
检查家庭项目按 - 它什么也没做)。当我按下后退按钮时,它将我带回正确的位置。但是,如果我导航回来,即使代码运行通过onCreate
,现在更长的后退箭头也会显示!
这只是其中很多的奋斗之后为我工作的解决方案。感谢分享! 调用'toggle.syncState();'是一个关键因素,否则汉堡菜单一旦返回就不可见。 – 2017-03-30 22:50:58