在使用 Navigation Drawer 时,Android 开发人员建议在 ActionBar 中“只有那些在 Navigation Drawer 中表示的屏幕实际上应该具有 Navigation Drawer 图像”,并且“所有其他屏幕都具有传统的 up carat”。
详情见这里: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();
我遇到的问题是,当我导航回顶层片段时,Up 克拉仍然显示,而不是原始的 Navigation Drawer 图像。关于如何“刷新”顶级片段上的 ActionBar 以重新显示 Navigation Drawer 图像的任何建议?
解决方案
汤姆的建议对我有用。这是我所做的:
主要活动
此活动控制应用程序中的所有片段。
在准备新的片段来替换其他片段时,我将 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)
}
在 LowerLevelFragments
在我修改的片段中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;
…
}