GoogleMap API KEY 발급과 해당 Fragment는 이미 구현한 상태부터 시작한다.
1 step)
build.gradle에 dependencies 추가
implementation 'com.google.android.gms:play-services-location:19.0.1'
implementation 'com.google.android.gms:play-services-maps:18.0.2'
버전은 최신 버전으로 높여서 써도 상관없다.
2 step)
해당 Fragment XML에 FragmentContainerView를 이용해 GoogleMap을 구현한다.
name 속성을 아래와 같이 적어야 한다.
fragment_map.xml
<androidx.fragment.app.FragmentContainerView
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/shop_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
3 step)
이제 fragment.kt 클래스 파일에서 코드 구현 !
onMapReadyCallback 인터페이스를 implements 해준다.
binding을 사용하고 있었기 때문에 가장 처음에 코드 짤 때는
mapFg = R.id.shop_map as SupportMapFragment;
이런 식으로 Fragment의 map을 불러왔는데 그렇게 하니
java.lang.ClassCastException: java.lang.Integer cannot be cast to com.google.android.gms.maps.SupportMapFragment
로그에 이러한 오류 메세지가 떴다.
cast 문제라고 해서 as 뒤에를 여러개로 바꿔보면서 시도했는데도 비슷한 오류가 계속 되어 알아보니,
mapFragment는 findFragmentById를 사용해야 찾아쓸 수 있다고...!!!
mapView를 사용할 때는 그냥 바로 R.id로 찾아쓸 수 있다고 하니 두개를 잘 구분해서 사용하자.
전체적인 기본 구조만 짜보면 아래 코드와 같다.