2015-06-14 3 views
2

Мне интересно, как правильно изменить фрагменты, добавить их в 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} 

Как изменить видимые фрагменты и восстановить их после вращения экрана?
Я не думаю, что сохранение какой-либо строки или фрагмента каждый раз является хорошим решением для их восстановления.

+0

Вы можете посмотреть на http://stackoverflow.com/questions/30779054/fragments-addtobackstack-closing-the-application/30780525#30780525 вопрос –

ответ

1

Если ваша деятельность расширяет android.app.Activity, вам не нужно переопределять onBackPressed(). Он автоматически выведет ваши фрагменты из заднего стека.

Смежные вопросы