我现在正在用这个挠头....我有一个ActionBarActivity
加载初始Fragment
的 - 原始菜单在活动中膨胀。Now, I have a navigation bar that, when an item is selected, loads a different fragment and adds this to the backstack.
当我这样做时,我想设置几件事:
- 将家设置为向上指示器
- 使主活动中的选项菜单无效
- Set 有片段的选项为 true
- 确保向上指示器正确导航回原始片段
发生了一些相当奇怪的事情 - 向上指示器只出现一次并且不作为后退按钮,虽然我已经使新菜单无效并膨胀,但新菜单会附加到原始活动菜单。
编辑:menu.clear()
好的,我已经解决了附加问题 - 忘记添加onCreateOptionsMenu
方法。
我的导航抽屉布局具有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();
}
切换首页:
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
!