Мне интересно, как правильно изменить фрагменты, добавить их в backstack и восстановить видимый фрагмент после вращения экрана.
В настоящее время я использую этот метод для инициализации первого фрагмента:Правильная замена фрагментов
private void inflateInitialFragment() {
FragmentManager manager = getFragmentManager();
Fragment mainFragment = manager.findFragmentByTag(MainMenuFragment.class.getSimpleName());
FragmentTransaction ft = manager.beginTransaction();
if (mainFragment == null) {
ft.replace(R.id.mainContainer, new MainMenuFragment(), MainMenuFragment.class.getSimpleName());
} else if (!(mainFragment.isAdded() && !mainFragment.isDetached() && !mainFragment.isRemoving())) {
ft.replace(R.id.mainContainer, mainFragment, MainMenuFragment.class.getSimpleName());
}
ft.commit();
manager.executePendingTransactions();
}
А затем, чтобы отобразить новые фрагменты у меня есть такие методы, как эта:
public void openAwards() {
getFragmentManager().beginTransaction().replace(R.id.mainContainer,
new AwardsFragment(), AwardsFragment.class.getSimpleName()).addToBackStack(null).commit();
}
И чтобы вернуться к главному экрану:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 0) {
super.onBackPressed();
} else {
getFragmentManager().popBackStack();
}
}
После нескольких поворотов экрана, у меня падает, как это одно:
java.lang.IllegalStateException: Fragment already added: MainMenuFragment{42c64d90 #0 id=0x7f0b003f MainMenuFragment}
Как изменить видимые фрагменты и восстановить их после вращения экрана?
Я не думаю, что сохранение какой-либо строки или фрагмента каждый раз является хорошим решением для их восстановления.
Вы можете посмотреть на http://stackoverflow.com/questions/30779054/fragments-addtobackstack-closing-the-application/30780525#30780525 вопрос –