Отображение маркеров Android Google Maps api

#android #google-maps #android-fragments #maps #google-maps-markers

#Android #google-карты #android-фрагменты #Карты #google-карты-маркеры

Вопрос:

Я новичок в Google Maps Android API. Я знаю, что этот вопрос уже был опубликован, но они старые, и я имею в виду новую версию API. Я разрабатываю навигационный ящик, содержащий один из фрагментов, посвященных картам. Я вижу только карты, но без маркеров, без масштабирования. похоже, карты не будут загружены должным образом.

открытый класс MapsFragment расширяет фрагмент, реализует OnMapReadyCallback{

 @Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_maps, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    MapFragment mapFragment =  (MapFragment) getChildFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(44.797283, 20.460663);
    googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
  

Это XML, называемый fragment_maps.xml

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.app.myapp.view.MapsFragment">

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.google.android.gms.maps.MapFragment"
    android:id="@ id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
</FrameLayout>
  

Спасибо

Ответ №1:

Пожалуйста, не используйте ярлыки из примеров. Сохраните объект GoogleMap, затем используйте свойства и методы сохраненного объекта.

    @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;

            // Add a marker in Sydney, Australia, and move the camera.
            LatLng sydney = new LatLng(-34, 151);
            mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
            mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
        }
  

Комментарии:

1. К сожалению, создание частного объекта GoogleMap и присвоение его аргументу метода не решает проблему. Я отладил его и заметил, что он никогда не попадает в метод onMapReady: что-то еще останавливает загрузку карты. Карты отображаются правильно, поэтому ключ API указан правильно. Я бы подумал, что проблема связана с фрагментом и навигационным ящиком

2. это может быть MapFragment.getMapAsync(this.onMapReady) IDK, я сейчас не в IDE.