I have a navigation drawer that transitions between several activities. In each activity I have one base fragment that might launch other fragments. I want the navigation drawer toggle icon to show when I am in the base fragment but when I add another fragment I need to show the back arrow.
I have been following the example laid out by riwnodennyk at: Switching between Android Navigation Drawer image and Up caret when using fragments
But it is not working for me. The arrow does show up but I am unable to click it. When clicking on it nothing happens.
OptionsMenuListner in non-base fragment:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
Log.d("HERE", "HERHEHREHREHddddddREe");
return false;
}
I do call setHasOptionsMenu(true); in the fragment.
the relevant parts of the navigation fragment:
public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
mFragmentContainerView = getActivity().findViewById(fragmentId);
mDrawerLayout = drawerLayout;
mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
setActionBarArrowDependingOnFragmentsBackStack();
if (!isAdded()) return;
getActivity().invalidateOptionsMenu();
if (mCallbacks != null && nextSelectedPosition != mCurrentSelectedPosition) {
mCurrentSelectedPosition = nextSelectedPosition;
mCallbacks.onNavigationDrawerItemSelected(nextSelectedPosition);
}
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
setDrawerIndicatorEnabled(true);
if (!isAdded()) return;
getActivity().invalidateOptionsMenu();
}
};
mActionBarDrawerToggle.setHomeAsUpIndicator(R.drawable.appbar_back);
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mActionBarDrawerToggle.syncState();
}
});
mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
((BaseNavigationActivity)getActivity()).getSupportFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener);
}
private FragmentManager.OnBackStackChangedListener
mOnBackStackChangedListener = new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
Log.d("TAG", "Back stack was called");
setActionBarArrowDependingOnFragmentsBackStack();
}
};
private void setActionBarArrowDependingOnFragmentsBackStack() {
int backStackEntryCount =
((BaseNavigationActivity)getActivity()).getSupportFragmentManager().getBackStackEntryCount();
Log.d("TEST", "Back Stack Count: " + backStackEntryCount);
mActionBarDrawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}