Неустрашимое исключение: java.lang.IllegalStateException
Фрагмент уже добавлен: FragmentFav{4b16cda
Код: Выделить всё
public class ActivityMain extends AppCompatActivity {
(...)
private BottomNavigationView bottomNavigationView;
private ViewGroup container;
private Fragment currFragment;
private Fragment bottomNavFragment;
private FragmentMain fragmentMain;
private FragmentFav fragmentFav;
private FragmentSearch fragmentSearch;
private FragmentShowNote fragmentShowNote;
private FragmentGroup fragmentGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
(...)
setFragments(savedInstanceState);
setContentView(R.layout.activity_main);
(...)
configureBottomNavigationView();
container = findViewById(R.id.content_frame);
if (savedInstanceState == null) {
currFragment = fragmentMain;
bottomNavFragment = fragmentMain;
} else {
currFragment = getSupportFragmentManager().getFragment(savedInstanceState, "current_fragment");
bottomNavFragment = getSupportFragmentManager().getFragment(savedInstanceState, "bottom_nav_fragment");
}
if (savedInstanceState == null) {
FragmentTransaction ft = fm.beginTransaction();
ft.add(container.getId(), fragmentMain, "main");
ft.commit();
}
(...)
}
private void setFragments(Bundle savedInstanceState) {
if (savedInstanceState == null) {
fragmentMain = new FragmentMain();
fragmentFav = new FragmentFav();
fragmentSearch = new FragmentSearch();
fragmentGroup = new FragmentGroup();
fragmentAbout = new FragmentAbout();
} else {
fragmentMain = fm.findFragmentByTag("main") != null ? (FragmentMain) fm.findFragmentByTag("main") : new FragmentMain();
fragmentFav = fm.findFragmentByTag("fav") != null ? (FragmentFav) fm.findFragmentByTag("fav") : new FragmentFav();
fragmentSearch = fm.findFragmentByTag("search") != null ? (FragmentSearch) fm.findFragmentByTag("search") : new FragmentSearch();
fragmentGroup = fm.findFragmentByTag("group") != null ? (FragmentGroup) fm.findFragmentByTag("group") : new FragmentGroup();
fragmentAbout = fm.findFragmentByTag("about") != null ? (FragmentAbout) fm.findFragmentByTag("about") : new FragmentAbout();
}
}
private void configureBottomNavigationView() {
bottomNavigationView = findViewById(R.id.bottomNavigation);
bottomNavigationView.setOnItemSelectedListener(item -> {
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out);
if (item.getItemId() == R.id.action_main) {
doOnMainItemSelected(ft);
} else if (item.getItemId() == R.id.action_fav) {
doOnFavItemSelected(ft);
} else if (item.getItemId() == R.id.action_search) {
doOnSearchItemSelected(ft);
}
ft.commit();
return true;
});
}
private void doOnMainItemSelected(FragmentTransaction ft) {
manageOldFragment(ft);
ft.show(fragmentMain);
doAfterFragmentCommitment(fragmentMain);
bottomNavFragment = fragmentMain;
}
private void doOnFavItemSelected(FragmentTransaction ft) {
manageOldFragment(ft);
if (fragmentFav.isAdded())
ft.show(fragmentFav);
else
ft.add(container.getId(), fragmentFav, "fav");
doAfterFragmentCommitment(fragmentFav);
bottomNavFragment = fragmentFav;
}
private void doOnSearchItemSelected(FragmentTransaction ft) {
manageOldFragment(ft);
if (fragmentSearch.isAdded())
ft.show(fragmentSearch);
else
ft.add(container.getId(), fragmentSearch, "search");
doAfterFragmentCommitment(fragmentSearch);
bottomNavFragment = fragmentSearch;
}
private void manageOldFragment(FragmentTransaction ft) {
if (currFragment instanceof FragmentGroup || currFragment instanceof FragmentShowNote) {
ft.remove(currFragment);
fm.popBackStack();
} else {
ft.hide(currFragment);
}
}
private void doAfterFragmentCommitment(Fragment fragment) {
if (fragment instanceof FragmentMain) {
currFragment = fragmentMain;
} else if (fragment instanceof FragmentFav) {
currFragment = fragmentFav;
} else if (fragment instanceof FragmentSearch) {
currFragment = fragmentSearch;
} else if (fragment instanceof FragmentGroup) {
currFragment = fragmentGroup;
} else if (fragment instanceof FragmentAbout) {
currFragment = fragmentAbout;
}
(...)
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, "current_fragment", currFragment);
getSupportFragmentManager().putFragment(outState, "bottom_nav_fragment", bottomNavFragment);
}
}
Итак, в чем может быть проблема?
Заранее спасибо.>
Подробнее здесь: https://stackoverflow.com/questions/798 ... management
Мобильная версия