向上导航没有出现,当打开片段不在运行时

问题描述:

应用程序由ActivityNavigationDrawer组成,我们也可以在2级层次结构中打开Fragment s。在后一种情况下,我们对ActionBar一个Back Button实现了通航。
在运行时,一切正常,如果我们通过点击事件打开2级分层结构中的碎片,但是当我们从代码执行相同的代码时 - 导航按钮不会显示出来。导航仍然有效。如果我们回到家中,NavigationBar的汉堡包图标就会显示出来,如果我们通过点击事件打开2级分层结构中的Fragment,那么后退按钮就会显示出来,而不是汉堡包图标。
总之:一切又正常工作,如果我们导航回到了家中的水平。向上导航没有出现,当打开片段不在运行时

的相关方法:

private void shouldDisplayHomeAsUp() { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    boolean shouldDisplay = fragmentManager.getBackStackEntryCount()>0; 
    ActionBar actionBar = getSupportActionBar(); 
    if (actionBar != null) { 
    actionBar.setDisplayHomeAsUpEnabled(shouldDisplay); 
    CharSequence actionBarTitle = actionBar.getTitle(); 
    if (isMainListFragment(shouldDisplay, actionBarTitle)) { 
     actionBar.setTitle(R.string.app_name); 
     setDrawerEnabled(true); 
    } 
    } 
} 

private void setDrawerEnabled(boolean enabled) { 
    if (!enabled) { 
    disableDrawer(); 
    enableActionBarBackNavigation(); 
    } else { 
    enableDrawer(); 
    } 
} 

private void disableDrawer() { 
    drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
    actionBarDrawerToggle.setDrawerIndicatorEnabled(false); 
    actionBarDrawerToggle.syncState(); 
} 

private void enableDrawer() { 
    drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
    actionBarDrawerToggle.setDrawerIndicatorEnabled(true); 
    actionBarDrawerToggle.syncState(); 
} 

private void enableActionBarBackNavigation() { 
    actionBarDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View view) { 
     onBackPressed(); 
    } 

    }); 
} 

shouldDisplayHomeAsUp()方法由onBackStackChanged()调用,但没有任何区别,当我们把它以静态方式。
主要是我们称之为actionBar.setDisplayHomeAsUpEnabled()actionBarDrawerToggle.setDrawerIndicatorEnabled(false)方法。

见下面的图片: left is the proper one

如果我们设置应用程序中的提醒,它会触发通知。当我们点击通知时,它会打开主屏幕 - 本地级别 - ,列表 - 如上所示 - 然后是与通知相关的待办事项的详细视图。然后我们可以回到视图层次结构中。这是以编程方式打开碎片的目的。

我解决了这个问题。
修改的方法是这样的:

private void shouldDisplayHomeAsUp() { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    boolean shouldDisplay = fragmentManager.getBackStackEntryCount()>0; 
    ActionBar actionBar = getSupportActionBar(); 
    if (actionBar != null) { 
    if (shouldDisplay) { 
     setDrawerEnabled(false); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } else { 
     actionBar.setDisplayHomeAsUpEnabled(false); 
     setDrawerEnabled(true); 
    } 

    CharSequence actionBarTitle = actionBar.getTitle(); 
    if (isMainListFragment(shouldDisplay, actionBarTitle)) { 
     actionBar.setTitle(R.string.app_name); 
     actionBar.setDisplayHomeAsUpEnabled(false); 
     setDrawerEnabled(true); 
    } 
    } 
} 

setDrawerEnabled(false)actionBar.setDisplayHomeAsUpEnabled(true)方法调用的顺序是非常重要的。这是问题的根源。