Моя программа имеет 6 фрагментов: Fragment1, Fragment2,....- > Fragment6.
Я использую оператор add() и replace() для переключения между фрагментом и отслеживания их жизненного цикла.
Fragment1 добавить Fragment2 добавить Fragment3 добавить Fragment4 добавить Fragment5 заменить Fragment6
Лог-кота, чтобы показать свой жизненный цикл (у меня есть некоторые printf-точки в onCreate, onCreateView, onDestroyView, onDestroy для отслеживания)
Тег ______________ Текст
Fragment1_ _______ _onCreate
Fragment1_ _______ _onCreateView
Fragment1_ _______ _add Fragment2
Fragment2_ _______ _onCreate
Fragment2_ _______ _onCreateView
Fragment2_ _______ _add Fragment3
Fragment3_ _______ _onCreate
Fragment3_ _______ _onCreateView
Fragment3_ _______ _add Fragment4
Fragment4_ _______ _onCreate
Fragment4_ _______ _onCreateView
Fragment4_ _______ _add Fragment5
Fragment5_ _______ _onCreate
Fragment5_ _______ _onCreateView
Fragment5 _______ заменить Fragment6
Фрагмент1 _______ onDestroyView
Фрагмент3 _______ onDestroyView
Fragment5 _______ onDestroyView
Fragment6_ _______ _onCreate
Fragment6_ _______ _onCreateView
Мои вопросы:
Почему после того, как Fragment5 заменен на Fragment6, Fragment1 и 3 & 5 уничтожили их представление?.
Что происходит с Fragment2 и 4?
Почему Фрагмент2 и 4 не уничтожают их представление как Fragment1 и 3 & 5?
Пожалуйста, помогите мне полностью разобраться в жизненном цикле фрагмента при вызове метода add() и replace().
Обновите метод addFragment и replaceFragment:
public void addFragment(Fragment fromFragment, Fragment toFragment) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.container,toFragment, toFragment.getClass().getName());
transaction.hide(fromFragment);
transaction.addToBackStack(toFragment.getClass().getName());
transaction.commit();
}
public void replaceFragment(Fragment fromFragment, Fragment toFragment) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container,toFragment, toFragment.getClass().getName());
transaction.hide(fromFragment);
transaction.addToBackStack(toFragment.getClass().getName());
transaction.commit();
}