Навигационный компонент Android с сохраненными фрагментами и анимацией ввода

#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()
}