Динамическое добавление фрагмента в контейнер на другом фрагменте
С помощью PagerView создаю несколько фрагментов со схожим содержимым (список объектов). Пример:
Схожая часть: содержат поле типа vehicle
data class Vehicle(// ..список полей)
Различающаяся часть: (для примера)
data class Lorry(val idVehicle: Int,val cargoWeight: Int)
Средств передвижения несколько типов. В зависимости от того, какой тип средства передвижения отображаю, показываю дополнительные поля (например, поле cargoWeight) как фрагмент. По умолчанию имею контейнер типа SpecificFragment, фрагменты с дополнительной информацией по средству передвижения расширяют этот класс, например:
class LorryCharacteristicsFragment: SpecificFragment(){..}
Вопрос: как заполнять контейнер динамически? При способе, который использую сейчас, контейнет заполняется на первой вкладке pagerView (то есть, туда наслаиваются все фрагменты, которые добавляю). Необходимо как-то получать id контейнера, но я не знаю как (использую binding). Что есть сейчас:
fragmentManager?.beginTransaction()
?.setReorderingAllowed(true)
?.add(R.id.specific_vehic_info_container, selectTypeFragment(vehicle = vehicle)!!)
?.commit()
Не знаю как получить id контейнера именно на этой вкладке viewPager
Ответы (1 шт):
Ларчик открывался просто. Во-первых, при использовании databinding мы не можем обратиться к фрагменту как binding.fragment, тк фрагмент не является View. Фрагмент:
<fragment
android:id="@+id/specific_vehic_container"
android:name="com.olzumzum.race_app.ui.SpecificFragment"
android:tag="fragment_specific_vehic_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Обращение:
val specFragment = childFragmentManager.findFragmentByTag("fragment_specific_vehic_container")
Чтобы поместить новый фрагмент в контейнер, находящийся в другом фрагменте, нужно использовать не fragmentManager, а childFragmentManager:
childFragmentManager.beginTransaction()
.setReorderingAllowed(true)
.add(specFragment?.id!!, selectTypeFragment(vehicle = vehicle)!!)
.commit()