него. Храню contentView внутри фрагмента, в onCreateView возвращаю contentView или, если он пока не создан - новый вью и присваиваю ссылку на него contentView
При возврате на фрагмент видим
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Ошибка вылезает не в нашем коде, но внутри фрамент менеджера и ч помощью логов легко убедиться, что это наши view
не беда, делаем функцию prepareView вроде такой
private fun prepareView(view: View?): View? =
(view?.parent as? ViewGroup)?.removeView(view).let { view }
оборачиваем в неё то, что возвращается в onCreateView - и всё начинает работать, но через раз. И снова не беда - вызываем функцию на contentView в onDestroyView - работает, ура!
Однако, если открытьь следующий фрагмент и нажать назад очень быстро - ошибка вылезает снова.
Как я понимаю это проиcходит из за того, что всё распараллеливается на треды и removeView попросту не успевает отработать к тому времени, когда contentView пытается приаттачиться.
Кто нибудь может подсказать или посоветовать,как это можно захендлить?
Да, навигация у меня построена через navigation components и нет возможности достучаться до методов транзакции
А нельзя переместить нужный код в onResume просто? Или в onResume положить кастомную функцию updateView?
А, я не правильно прочитал вопрос.
Обсуждают сегодня