Каждый раз, когда вы создаете новый фрагмент вместо повторного использования старого.
Вы можете создавать фрагменты в виде полей в вашем классе:
ImagesFragment imagesFragment = new ImagesFragment();
ProfileFragment profileFragment = new ProfileFragment();
А внутри вашего switch
вы можете использовать их повторно:
switch (item.getItemId()) {
case R.id.nav_image:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container,
imagesFragment
).commit(); //this contains recycleview
break;
case R.id.nav_profile:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container,
profileFragment)
.commit();
break;
}
Вы можете разделить ваш метод на два:
Отображение выбранного фрагмента (и скрытие остальных):
public class MainActivity extends AppCompatActivity {
// Create instance of the fragments
ImagesFragment imagesFragment = new ImagesFragment();
ProfileFragment profileFragment = new ProfileFragment();
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// Select fragment to show
switch (item.getItemId()) {
case R.id.nav_image:
showFragment(imagesFragment);
break;
case R.id.nav_profile:
showFragment(profileFragment);
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
void showFragment(Fragment fragmentToShow) {
// Create transactionns
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
// Hide all of the fragments
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
transaction.hide(fragment);
}
if (fragmentToShow.isAdded()) {
// When fragment was previously added - show it
transaction.show(fragmentToShow);
} else {
// When fragment is adding first time - add it
transaction.add(R.id.fragment_container, fragmentToShow);
}
transaction.commit();
}
}