Google Map Maker List
_________________________
init Varibale
_________________________
private var mMapFragment: SupportMapFragment? = null
private lateinit var googleMap: GoogleMap
private var mMarkerList = ArrayList<Markers>()
_________________________
OnObserver
_________________________
mViewModel.onScreenAppear.observe(this, Observer {
if (it != null) {
if (isLocationPermissionGranted()) initMap()
else initMapPermission()
}
})
mViewModel.apiResponse.observe(this, Observer {
if (it != null) {
getMarkerList(it.results!!)
if (!mMarkerList.isNullOrEmpty()) {
Log.e("Tag","getMarkerList() mMarkerList.size--> ${mMarkerList.size}")
addMarker()
}
}
})
_________________________
for example -> getMarkerList()
_________________________
private fun getMarkerList(results: List<SearchPlacesResult>) {
mMarkerList.clear()
Log.e("Tag","getMarkerList() mMarkerList.size--> ${mMarkerList.size}")
for ((i, e) in results.withIndex()) {
if (e.data?.geometry != null) {
Log.e("Tag","getMarkerList() --> ${e.data?.geometry?.location}")
mMarkerList.add(Markers(e.data?.geometry?.location, e.data?.name, e.data?.formattedAddress))
}
}
Log.e("Tag","getMarkerList() mMarkerList.size--> ${mMarkerList.size}")
}
_________________________
addMarker()
_________________________
private fun addMarker() {
Log.e("Tag","addMarker() googleMap--> $googleMap")
googleMap.apply {
for (e in mMarkerList) {
addMarker(MarkerOptions().position(LatLng(e.mLocation?.lat!!, e.mLocation?.lng!!)).title(e.name+e.address))
}
val cameraPosition = CameraPosition.Builder().target(LatLng(mMarkerList[0].mLocation?.lat!!, mMarkerList[0].mLocation?.lng!!)).zoom(8f).build()
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition))
}
}
_________________________
initMapPermission
_________________________
private fun initMapPermission() {
marshMellowHelper = MarshMellowHelper(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION), PERMISSIONS_REQUEST_CODE)
marshMellowHelper!!.request(object : MarshMellowHelper.PermissionCallback {
override fun onPermissionGranted() {
initMap()
}
override fun onPermissionDenied() {
}
override fun onPermissionDeniedBySystem() {
}
})
}
private fun isLocationPermissionGranted(): Boolean {
return ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (marshMellowHelper != null) {
marshMellowHelper!!.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}
_________________________
initMap()
_________________________
private fun initMap() {
Log.e("Tag","initMap() --> start")
mMapFragment = childFragmentManager.findFragmentById(R.id.mapFragment) as? SupportMapFragment
Log.e("Tag","initMap() --> $mMapFragment")
mMapFragment?.getMapAsync {
Log.e("Tag","initMap() --> getMapASync")
googleMap = it
Log.e("Tag","initMap() --> $it")
}
}
_________________________
Markers Data Class
_________________________
data class Markers(var mLocation: Location? = null, var name: String? = null, var address: String? = null)
_________________________
xml
_________________________
<androidx.cardview.widget.CardView
android:id="@+id/cv_map"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginTop="@dimen/dp_12"
app:cardCornerRadius="@dimen/dp_8"
app:cardElevation="@dimen/dp_0"
app:cardPreventCornerOverlap="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<fragment
android:id="@+id/mapFragment"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.cardview.widget.CardView>
_________________________













