最佳答案
当使用导航抽屉时,Android 开发人员建议在 ActionBar 中“只有那些在导航抽屉中显示的屏幕应该有导航抽屉图像”,并且“所有其他屏幕都有传统的向上克拉”
详情请参阅此处: http://youtu.be/F5COhlbpIbY
我使用一个活动来控制多个级别的片段,并可以获得导航抽屉图像显示和功能在所有级别。
在创建较低级别的片段时,我可以调用 ActionBarDrawerToggle
setDrawerIndicatorEnabled(false)
来隐藏导航抽屉图像并显示向上插入符号
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag, "lowerFrag").addToBackStack(null).commit();
我遇到的问题是,当我导航回到顶层片段的向上克拉仍然显示,而不是原来的导航抽屉图像。关于如何“刷新”顶层片段上的 ActionBar 以重新显示导航抽屉图像,有什么建议吗?
汤姆的建议对我很有效,我是这么做的:
此活动控制应用程序中的所有片段。
当准备新的片段替换其他片段时,我设置 DrawerToggle setDrawerIndicatorEnabled(false)
如下:
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag).addToBackStack(null).commit();
接下来,在重写 onBackPressed
时,我将 DrawerToggle 设置为 setDrawerIndicatorEnabled(true)
,如下所示:
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
在这些片段中,我像这样修改了 onCreate
和 onOptionsItemSelected
:
在 onCreate
中增加了 setHasOptionsMenu(true)
以启用配置选项菜单。还设置 setDisplayHomeAsUpEnabled(true)
以启用操作栏中的 < :
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// needed to indicate that the fragment would
// like to add items to the Options Menu
setHasOptionsMenu(true);
// update the actionbar to show the up carat/affordance
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
然后在 onOptionsItemSelected
中,只要按下 < ,它就从活动中调用 onBackPressed()
,在层次结构中向上移动一级,并显示导航抽屉图像:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
switch (item.getItemId()) {
case android.R.id.home:
//called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
…
}