I found the answer here: https://stackoverflow.com/a/20314570/5222156
In onCreate on hosting Activity, after setting up Toolbar and Drawer I initialized listener for changes in backstack
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupToolbar(R.drawable.ic_menu);
setupNavigationDrawer();
getSupportFragmentManager().addOnBackStackChangedListener(this);
}
The rest of the code looks almost the same as in the original answer:
@Override
public void onBackStackChanged() {
shouldDisplayHomeUp();
}
public void shouldDisplayHomeUp() {
//Enable Up button only if there are entries in the back stack
FragmentManager fragmentManager = getSupportFragmentManager();
int count = fragmentManager.getBackStackEntryCount();
Fragment fr = fragmentManager.findFragmentById(R.id.flContent);
String tag = fr.getTag();
boolean canGoBack = count > 0;
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setHomeAsUpIndicator(canGoBack ? R.drawable.ic_arrow_back : R.drawable.ic_menu);
actionBar.setTitle(tag);
}
}
@Override
public boolean onSupportNavigateUp() {
boolean canGoBack = getSupportFragmentManager().getBackStackEntryCount() > 0;
if (canGoBack) {
navigationController.navigateBack();
} else {
mDrawerLayout.openDrawer(Gravity.START);
}
return true;
}
@Override
public void onBackPressed() {
if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
closeDrawer();
} else {
super.onBackPressed();
}
}