java.lang.IllegalArgumentException: No view found for id
Есть приложение с 1 активити и несколькими фрагментами, при запуске сразу открывается один из фрагментов. Требуется открыть дочерний фрагмент из родительского.
MainActivity() -> FirstFragment() -> DetailFragment()
Если в FirstFragment() , например, по нажатию кнопки вызвать
fragmentManager
?.beginTransaction()
?.replace(R.id.fragment_container, DetailFragment())
?.addToBackStack(null)
?.commit()
то работает все как надо, по крайней мере на первый взгляд. Но этот метод !Deprecated! fragment_container - это id контейнера в main_layout.xml
Вместо него вызываю
childFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, DetailFragment())
.addToBackStack(null)
.commit()
и по нажатию на кнопку появляется ошибка
java.lang.IllegalArgumentException: No view found for id ... for fragment DetailFragment ...
Ответы (1 шт):
childFragmentManager ищет внутри разметки фрагмента, а там никакого fragment_container нет, потому что он располагается в размете активити.
fragmentManager из системного пакета android.app.* уже давно не рекомендуется использовать ввиду того, что не на всех версиях Андроид он работает корректно.
Раньше вместо него использовали supportFragmentManager из Support Library, а теперь androidx.fragment.app.FragmentManager из Jetpack.
https://developer.android.com/jetpack/androidx/releases/fragment
https://developer.android.com/reference/kotlin/android/app/FragmentManager