В нашем проекте у нас есть некоторое время простоя, и мы решили обновить целевую версию SDK проекта с API 26 на API 28. Проект собирается и работает довольно хорошо. Проблема, которая у нас есть, заключается в том, что мы получаем эту ошибку, когда переключаемся обратно на фрагмент, находящийся в заднем стеке:
У указанного ребенка уже есть родитель. Сначала вы должны позвонить родителю ребенка removeView()
.
У нас есть класс с именем BaseNavigationController
, который является фрагментом и управляет нашими вложенными фрагментами. Мы используем getChildFragmentManager
и устанавливаем setCustomAnimations
со значениями enter, exit, popEnter и popExit.
Ошибка «исчезает», когда мы устанавливаем продолжительность всей анимации на одинаковую длину. Но это сохранится, если мы удалим setCustomAnimations
из транзакции.
getFragmentManager().beginTransaction()
.setCustomAnimations(enter, exit, popEnter, popExit)
.addToBackStack(null)
.replace(R.id.main_container, controller, tag)
.commit();
Я не нашел правильного решения этой проблемы. Один из способов - удалить представление в методе onDestroyView
в базовом фрагменте. Но затем мы получаем пустой экран на входной анимации из заднего стека. Другой - мы используем метод getFragmentManager
, но тогда вложение фрагментов работает некорректно.