mainactivity.kt
Код: Выделить всё
class MainActivity : BaseActivity(), OnMapReadyCallback, MapController {
private lateinit var googleMap: GoogleMap
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initialize()
initializeMap()
}
override fun getLayoutResourceId(): Int {
return R.layout.activity_main
}
override fun onMapReady(map: GoogleMap) {
this.googleMap = map
}
private fun initialize() {
}
private fun initializeMap() {
val mapFragment =
supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment?.getMapAsync(this)
}
override fun getGMap(): GoogleMap? {
return if (isMapReady()) googleMap else null
}
override fun isMapReady(): Boolean {
return ::googleMap.isInitialized
}
}
< /code>
mapcontroller.kt
interface MapController {
fun getGMap(): GoogleMap?
fun isMapReady() : Boolean
}
Как определить/хранить/структурировать карту Google? Таким образом, я могу использовать это в нескольких местоположении и файлах < /p>
Да, я знаю, что я могу передать GoogleMap в качестве аргумента, но это не эффективный способ, я думаю. Карта Google < /p>
Фрагмент дискеткуляции: < /p>
Код: Выделить всё
class DistanceFragment : BaseFragment(){
private lateinit var googleMap: GoogleMap
protected open var mapController: MapController? = null
override fun onAttach(context: Context) {
super.onAttach(context)
Log.i(TAG, "Fragment attached")
mapController = context as? MapController
?: throw ClassCastException("$context must implement MapController")
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
mapController?.let { controller ->
if (controller.isMapReady()) {
googleMap = controller.getGMap()!!
setupMapEvents()
}
}
}
}
Я знаю, что есть эффективный и более безопасный способ получить карту Google
Подробнее здесь: https://stackoverflow.com/questions/797 ... pp-android
Мобильная версия