【发布时间】:2015-03-08 18:53:07
【问题描述】:
我现在正在为这个挠头......我有一个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 的 Fragment 选项为 true
- 确保向上指示器正确导航回原始片段
发生了一些相当奇怪的事情 - 向上指示器只出现一次,并且不像后退按钮,虽然我已经使新菜单无效并膨胀,但新菜单会附加到原始活动菜单。
编辑:好的,我已经解决了附加问题 - 忘记在 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();
}
切换主页:
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 然后扩展另一个菜单布局(包含一个称为设置的项目)。
如前所述,这仅部分有效 - 第一次使用该项目加载 Fragment 时,我得到了后退图标,但它也不起作用(这是在 onOptionsItemSelected 中设置的以检查主页项目按下 -它什么都不做)。当我按下后退按钮时,它会将我带回正确的位置。但是,如果我向后导航,即使代码通过onCreate 运行,后退箭头现在也会显示更长的时间!
【问题讨论】:
标签: android fragment android-toolbar android-actionbaractivity fragment-backstack