我现在正在用这个挠头。...我有一个ActionBarActivity
加载了初始字母Fragment
的菜单-活动中原始菜单被放大。现在,我有,选择了一个项目时,导航栏,负载不同的片段和其加入到堆栈中。
当我这样做时,我需要设置以下几项:
发生了一件非常奇怪的事情-向上指示器仅出现一次,并且不充当后退按钮,尽管我已经使新菜单无效和膨胀,但是新菜单会附加到原始“活动”菜单中。
编辑:好的,我已经解决了附加问题-忘记menu.clear()
在onCreateOptionsMenu
方法中添加。
我的导航抽屉布局具有onClick
所有菜单项的方法,这些方法将触发另一个Fragment的加载:
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
再膨胀另一个菜单布局(包含一个项目所调用的设置)。
如前所述,这只能部分使用一次-第一次使用该项目加载Fragment时,我得到了后退图标,但它也不起作用(在此设置中onOptionsItemSelected
可以检查是否按了主页项目-它什么也不做)。当我按下返回按钮时,它将带我回到正确的位置。但是,如果我向后浏览,即使代码运行成功,现在也将更长地显示后退箭头onCreate
!
好的,经过一些反复尝试,我设法解决了这个问题。进行了两项更改:
addOnBackStackChangedListener
ActionBarDrawerToggle's
setToolbarNavigationClickListener
需要设置因为我只有一个活动(所有其他都是Fragment类),所以我将Backstack侦听器添加到了Parent Activity的onCreate
方法中:
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} else {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}
}
});
回到片段时,这解决了消失的后退箭头。最后,将侦听器添加到我的NavigationDrawer的设置类中:
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().onBackPressed();
}
});
我想我唯一的问题就是将onOptionsItemSelected
方法与之结合使用的一切,android.R.id.home
但这对我没有用。当然,这可能是我实施事情的方式,但是如果有人对为什么出现任何明显的事情,请告诉我!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句