例えばViewPagerに配置したFragmentに地図を配置したい場合などなど。
そのままFragmentのレイアウトにベタっとSupportMapFragmentを配置して、
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ParentFragment"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" ... /> </androidx.constraintlayout.widget.ConstraintLayout>
親Fragment側から、findFragmentByIdすれば取得できるかなーなんて思ってたけど、ダメだった。
fragmentManager?.findFragmentById(R.id.map) //return null
実装例
FragmentTransactionからreplaceするやり方で配置できる
layout
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ParentFragment"> <FrameLayout android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
ParentFragment
lateinit var mMap:GoogleMap override fun onViewCreated(view: View, savedInstanceState: Bundle?) { val fragmentTransaction = fragmentManager?.beginTransaction() fragmentTransaction?.let{ val mapFragment = SupportMapFragment() mapFragment.getMapAsync(this) fragmentTransaction.replace(R.id.map, mapFragment); fragmentTransaction.commit(); } super.onViewCreated(view, savedInstanceState) } override fun onMapReady(googleMap: GoogleMap) { mMap = googleMap }
リンク
リンク