Карты Google отображаются серым цветом на устройстве Android

У меня есть карта Google, реализованная в моем приложении (во фрагменте), когда я открываю этот фрагмент, он просто показывает серый экран, пока я получаю правильную широту, долготу

Код

override fun onCreateView(
  inflater: LayoutInflater, container: ViewGroup?,
  savedInstanceState: Bundle?
): View? {
  // Inflate the layout for this fragment
  val root = inflater.inflate(R.layout.fragment_map_to_customer, container, false)
  customerAddressArgument = requireArguments().getString("customerAddressArgument").toString()
  // Google Maps
  var mapView = root.findViewById(R.id.map) as MapView
  mapView.getMapAsync(this)
  mapView.onCreate(arguments)
  return root
}

override fun onMapReady(googleMap: GoogleMap) {
  mMap = googleMap
  // mMap.uiSettings.isZoomControlsEnabled = true

  val geoCoder = Geocoder(context)
  var address = geoCoder.getFromLocationName(customerAddressArgument, 1)!![0]
  val latLng = LatLng(address.latitude, address.longitude)
  mMap!!.addMarker(MarkerOptions().position(latLng).title("Location"))
  mMap!!.animateCamera(CameraUpdateFactory.newLatLng(latLng))
  Log.d("latLng20:", latLng.toString()) <-- return: **D/latLng20:: lat/lng: (-6.3946055,106.7947916)**
  Toast.makeText(
    context,
    address.latitude.toString() + " " + address.longitude,
    Toast.LENGTH_LONG
  ).show()
}

latLng в Google сайт карты

Есть идеи?


person mafortis    schedule 09.02.2021    source источник
comment
что такое mapView.onCreate(arguments), я не нашел его в документах?   -  person Pavel Poley    schedule 09.02.2021
comment
@PavelPoley без этой карты не загрузится   -  person mafortis    schedule 09.02.2021
comment
ваша карта SDK включена?   -  person Usama Altaf    schedule 09.02.2021
comment
@UsamaAltaf да, наверное, да, но чтобы быть уверенным, где я должен это проверить?   -  person mafortis    schedule 09.02.2021
comment
console.developers.google.com здесь   -  person Usama Altaf    schedule 09.02.2021
comment
@UsamaAltaf да, включено.   -  person mafortis    schedule 09.02.2021
comment
что показывает ваш логкэт?   -  person Usama Altaf    schedule 09.02.2021
comment
@UsamaAltaf Log.d("latLng20:", latLng.toString()) <-- return: **D/latLng20:: lat/lng: (-6.3946055,106.7947916)**   -  person mafortis    schedule 09.02.2021
comment
@UsamaAltaf, очевидно, карта не загрузится, пока я не коснусь экрана несколько раз! есть идеи, как это исправить?   -  person mafortis    schedule 09.02.2021
comment
карта загрузится после того, как вы коснетесь экрана несколько раз?   -  person Usama Altaf    schedule 09.02.2021
comment
да, странно правда :))   -  person mafortis    schedule 09.02.2021
comment
вы пытаетесь в реальном устройстве или эмуляторе? какая версия андроида?   -  person Usama Altaf    schedule 09.02.2021
comment
пробую на реальном устройстве, андроид 10   -  person mafortis    schedule 09.02.2021
comment
@UsamaAltaf Я нашел этот ответ, но для меня он красный на mMap.onResume() части   -  person mafortis    schedule 09.02.2021
comment
@UsamaAltaf исправил это: D   -  person mafortis    schedule 09.02.2021
comment
@mafortis Но как :)   -  person Usama Altaf    schedule 09.02.2021
comment
делюсь ответом   -  person mafortis    schedule 09.02.2021


Ответы (1)


Проблема

В процессе отладки я обнаружил, что моя карта требует нажатия на экран, чтобы загрузить каждую отдельную ее часть, и она не загружает элементы сама по себе.

Решение

Чтобы исправить проблему, которую я нашел, и ответьте здесь, который предложил использовать функцию onResume() для загрузки карт, и вот как готово.

var mapView: MapView? = null //<-- add this

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        val root = inflater.inflate(R.layout.fragment_map_to_customer, container, false)
        customerAddressArgument = requireArguments().getString("customerAddressArgument").toString()

        // Google Maps
        mapView = root.findViewById(R.id.map) as MapView //<- define it here
        mapView!!.getMapAsync(this)
        mapView!!.onCreate(arguments)
        return root
}

override fun onResume() {
  mapView?.onResume() //<- get it in onResume()
  super.onResume()
}

И проблема решена.

person mafortis    schedule 09.02.2021