#android #android-architecture-navigation
#Android #android-архитектура-навигация
Вопрос:
Я пытаюсь использовать навигационный компонент с сохраненным фрагментом и анимацией ввода. Фрагмент отображается с анимацией, как и ожидалось. При вращении моего устройства я получаю следующий сбой:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Я могу решить эту проблему, удалив анимацию ввода (из навигационного графика) или сделав так, чтобы фрагмент не сохранялся.
У кого-нибудь есть подсказка, как решить эту проблему, поскольку я хотел сохранить как сохраненную, так и анимацию.
Вот мое onCreate:
private var binding: FragmentDemoBinding? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? {
if (binding == null) {
binding = FragmentDemoBinding.inflate(inflater, container, false)
}
retainInstance = true
return binding?.root
}
:редактировать На самом деле, прочитав немного больше, я не уверен, что имеет смысл пытаться использовать сохраненные фрагменты в навигационном компоненте. Если мне нужно сохранить данные при изменениях конфигурации, я использую фрагмент без заголовка или использую onSaveInstance или ViewModel component и т.д.
Ответ №1:
В методе onDestroyView удалите все виды или только анимационный вид.
override fun onDestroyView() {
if(view != null){
val parent = view.parent
parent.removeAllViews
}
super.onDestroyView()
}