Целевой SDK Android перемещен с 26 на 28, ошибка: указанный дочерний элемент уже имеет родителя.Сначала вы должны вызвать removeView () у родителя ребенка - PullRequest
0 голосов
/ 02 января 2019

В нашем проекте у нас есть некоторое время простоя, и мы решили обновить целевую версию 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, но тогда вложение фрагментов работает некорректно.

...