Оставьте только основной с replace
вместо add
:
fm.beginTransaction().replace(R.id.fragment_container, magFragment, "5").commit();
и удалите это из onCreate
fm.beginTransaction().add(R.id.fragment_container, ideaFragment, "4").commit();
fm.beginTransaction().add(R.id.fragment_container, videoFragment, "3").commit();
fm.beginTransaction().add(R.id.fragment_container, articleFragment, "2").commit();
fm.beginTransaction().add(R.id.fragment_container, mainListFragment, "1").commit();
затем во включенном onNavigationItemSelected
выполните следующее:
switch (menuItem.getItemId()) {
case R.id.nav_home:
fm.beginTransaction().replace(R.id.fragment_container, magFragment, "5").commit();
break;
case R.id.nav_article:
fm.beginTransaction().replace(R.id.fragment_container, articleFragment, "2").commit();
break;
case R.id.nav_video:
fm.beginTransaction().replaceR.id.fragment_container, videoFragment, "3").commit();
break;
case R.id.nav_idea:
fm.beginTransaction().replace(R.id.fragment_container, ideaFragment, "4").commit();
break;
case R.id.nav_mag:
fm.beginTransaction().replace(R.id.fragment_container, mainListFragment, "1").commit();
break;
}
Инстанцирование каждого фрагмента в onCreate
- правильный путь, таким образом, вы не будете создавать новый фрагмент каждый раз, когда переключаетесь. Если вы хотите добиться такого поведения, вы должны использовать что-то вроде этого:
fm.beginTransaction().replace(R.id.fragment_container, new MagPresenter((MagContract.View) magFragment, appRepository), "1").commit();