当使用导航抽屉时,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();
我遇到的问题是,当我返回顶级片段时,“向上”字符仍然显示,而不是原始的导航抽屉图像。有没有建议如何在顶级片段上“刷新”操作栏以重新显示导航抽屉图像?
解决方案
汤姆的建议对我有用。以下是我的做法:
MainActivity
这个活动控制应用程序中的所有片段。
当准备新的片段来替换其他片段时,我会像这样设置 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;
…
}
.replace(R.id.frag_layout
。如果这是一个更高层次的层次结构,我会期望您将其.add
到后退栈中。 - JJDtheDrawerToggle.setDrawerIndicatorEnabled(false);
?我认为它是在MainActivity的类文件中声明的。我找不到引用它的方法。有什么提示吗? - SkynetToolbarWidgetWrapper
(内部android.support.v7.internal.widget包中的)中的setDisplayOptions()
方法将无法重新创建图标。将此留在这里,以便其他人遇到此问题时可以参考。 - Wolfram Rittmeyer