Facing the same issue like you...(I have removed the navigation view from fragment).
This solution is working for me.
You can try without removing navigation view from fragment.
Try this structure :
public your class
{
private int mNavItemId;
private static final String NAV_ITEM_ID = "navItemId";
onCreate()
{
if (null == savedInstanceState) {
mNavItemId = R.id.home;
} else {
mNavItemId = savedInstanceState.getInt(NAV_ITEM_ID);
}
//call setupnavigationview
setupnavigationview();
}
private void setupNavigationView() {
mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
mNavigationView.getMenu().findItem(mNavItemId).setChecked(true);
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
// update highlighted item in the navigation menu
menuItem.setChecked(true);
mNavItemId = menuItem.getItemId();
mDrawerLayout.closeDrawer(GravityCompat.START);
switch (menuItem.getItemId()) {
case R.id.id_of_your_menu_item:
call your fragment
break;
});
}
@Override
protected void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(NAV_ITEM_ID, mNavItemId);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
if (item.getItemId() == android.support.v7.appcompat.R.id.home) {
return mDrawerToggle.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}
}