Come mettere Google Maps V2 su un frammento usando ViewPager


138

Sto cercando di fare lo stesso layout di tabulazione nel Play Store. Ho avuto modo di visualizzare il layout della scheda usando frammenti e viewpager da androidhive. Tuttavia, non posso implementare google maps v2 su di esso. Ho già cercato su Internet per ore, ma non riesco a trovare un tutorial su come farlo. Qualcuno può mostrarmi come?


3
è divertente che debba tornare alla domanda che ho posto 3 anni fa, così posso ricordare come implementarla.
Jeongbebs,

Non c'è molta differenza tra l'implementazione di questo Activitye Fragmentuna volta è getChildFragmentManager()stato utilizzato.
NecipAllef,

Risposte:


320

Usando questo codice possiamo impostare MapView ovunque, all'interno di qualsiasi ViewPager o frammento o attività.

Nell'ultimo aggiornamento di Google per Maps, è supportato solo MapView per i frammenti. MapFragment & SupportMapFragment non funziona. Potrei sbagliarmi, ma questo è quello che ho visto dopo aver provato a implementare MapFragment & SupportMapFragment.

Impostazione del layout per mostrare la mappa nel file location_fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.google.android.gms.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

Ora, codifichiamo la classe Java per mostrare la mappa nel file MapViewFragment.java:

public class MapViewFragment extends Fragment {

    MapView mMapView;
    private GoogleMap googleMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.location_fragment, container, false);

        mMapView = (MapView) rootView.findViewById(R.id.mapView);
        mMapView.onCreate(savedInstanceState);

        mMapView.onResume(); // needed to get the map to display immediately

        try {
            MapsInitializer.initialize(getActivity().getApplicationContext());
        } catch (Exception e) {
            e.printStackTrace();
        }

        mMapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap mMap) {
                googleMap = mMap;

                // For showing a move to my location button
                googleMap.setMyLocationEnabled(true);

                // For dropping a marker at a point on the Map
                LatLng sydney = new LatLng(-34, 151);
                googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker Title").snippet("Marker Description"));

                // For zooming automatically to the location of the marker
                CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build();
                googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
            }
        });

        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();
    }
}

Infine, devi ottenere la chiave API per la tua app registrando la tua app su Google Cloud Console . Registra la tua app come app Android nativa.


2
<uses-library android:name="com.google.android.maps" android:required="true" />è per Maps V1, non Maps V2. In futuro ci saranno dispositivi che non hanno la com.google.android.mapslibreria del firmware ma sono perfettamente in grado di mostrare mappe Maps V2. Avere questa linea nel tuo manifest ti impedirà di funzionare su tali dispositivi e questa linea non è necessaria per l'uso di Maps V2. Ad esempio, i 17 progetti su github.com/commonsguy/cw-omnibus/tree/master/MapsV2 non hanno questo <uses-library>elemento e funzionano bene.
CommonsWare,

7
ricevo un errore durante l'utilizzo di questo metodo. per favore aiuto PID: 16260 java.lang.NullPointerException at com.example.imran.maps.MeFragment.setUpMapIfNeeded (MeFragment.java:115) at com.example.imran.maps.MeFragment.onCreateView Il codice (MeFragment.java:72) è qui: googleMap = ((SupportMapFragment) MainActivity.fragmentManager .findFragmentById (R.id.map)). GetMap ();
Imran Ahmed,

7
Ottengo un errore "NullPointerException" su mMap = ((SupportMapFragment) MainActivity.fragmentManager .findFragmentById (R.id.location_map)). GetMap ();
aletede91,

4
Esempio di codice: mMap = ((SupportMapFragment) MainActivity.fragmentManager .findFragmentById (R.id.location_map)). GetMap (); andrà in crash in getMap () se findFragmentById () restituisce null.
Gunnar Forsgren - Mobimazione

2
Sì, questo non funziona: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bo.o()' on a null object reference
Peter Weyand,

146

Il seguente approccio funziona per me.

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

/**
 * A fragment that launches other parts of the demo application.
 */
public class MapFragment extends Fragment {

MapView mMapView;
private GoogleMap googleMap;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // inflat and return the layout
    View v = inflater.inflate(R.layout.fragment_location_info, container,
            false);
    mMapView = (MapView) v.findViewById(R.id.mapView);
    mMapView.onCreate(savedInstanceState);

    mMapView.onResume();// needed to get the map to display immediately

    try {
        MapsInitializer.initialize(getActivity().getApplicationContext());
    } catch (Exception e) {
        e.printStackTrace();
    }

    googleMap = mMapView.getMap();
    // latitude and longitude
    double latitude = 17.385044;
    double longitude = 78.486671;

    // create marker
    MarkerOptions marker = new MarkerOptions().position(
            new LatLng(latitude, longitude)).title("Hello Maps");

    // Changing marker icon
    marker.icon(BitmapDescriptorFactory
            .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));

    // adding marker
    googleMap.addMarker(marker);
    CameraPosition cameraPosition = new CameraPosition.Builder()
            .target(new LatLng(17.385044, 78.486671)).zoom(12).build();
    googleMap.animateCamera(CameraUpdateFactory
            .newCameraPosition(cameraPosition));

    // Perform any camera updates here
    return v;
}

@Override
public void onResume() {
    super.onResume();
    mMapView.onResume();
}

@Override
public void onPause() {
    super.onPause();
    mMapView.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    mMapView.onDestroy();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
    mMapView.onLowMemory();
}
}

fragment_location_info.xml

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

8
sei un genio, mi hai salvato la vita. mMapView.onResume (); // necessario per far visualizzare immediatamente la mappa era la chiave
Stephane

1
Continuo a ricevere lo stesso errore java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized. Ho pensato che la cattura del tentativo si sarebbe occupata di questo. Qualcuno mi può aiutare?

@BrandonYang questo è un uomo fantastico .. Sono stato in grado di risolvere il cassetto di navigazione e la combinazione di mappe in modo molto semplice ... Saluti !!
Sreehari,

@BrandonYang: Sai perché devi chiamare manualmente tutti i callback del ciclo di vita per mMapView?
Christian Aichinger,

6
getMap()è deprecato. Usa getMapAsync e onMapReadyCallback invece: stackoverflow.com/a/31371953/4549776
jmeinke

80

È possibile utilizzare questa riga se si desidera utilizzare GoogleMapin un frammento:

<fragment
            android:id="@+id/map"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            class="com.google.android.gms.maps.SupportMapFragment" />

GoogleMap mGoogleMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap();

4
Grazie per la risposta! tutte le altre risposte non funzionano con le ultime librerie di supporto
Kamil Nekanowicz,

1
chiamare un frammento all'interno di un frammento è una buona pratica? in che modo ciò influisce sulle prestazioni dell'app e sul buon design del software ??
AouledIssa,

49

Roba più recente con getMapAsyncinvece di quella deprecata.

1. controlla manifest per

<meta-data android:name="com.google.android.geo.API_KEY" android:value="xxxxxxxxxxxxxxxxxxxxxxxxx"/>

Puoi ottenere la chiave API per la tua app registrando la tua app su Google Cloud Console. Registra la tua app come app Android nativa

2. nel layout del tuo frammento .xml aggiungi FrameLayout (non frammento):

                  <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="250dp"
                android:layout_weight="2"
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:id="@+id/mapwhere" />

o qualunque altezza tu voglia

3. In onCreateView nel tuo frammento

    private SupportMapFragment mSupportMapFragment; 

    mSupportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapwhere);
    if (mSupportMapFragment == null) {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        mSupportMapFragment = SupportMapFragment.newInstance();
        fragmentTransaction.replace(R.id.mapwhere, mSupportMapFragment).commit();
    }

    if (mSupportMapFragment != null)
    {
        mSupportMapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override public void onMapReady(GoogleMap googleMap) {
                if (googleMap != null) {

                    googleMap.getUiSettings().setAllGesturesEnabled(true);

                      -> marker_latlng // MAKE THIS WHATEVER YOU WANT

                        CameraPosition cameraPosition = new CameraPosition.Builder().target(marker_latlng).zoom(15.0f).build();
                        CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition);
                        googleMap.moveCamera(cameraUpdate);

                }

            }
        });

3
Grazie, risparmia molto tempo, questa è la risposta corretta come oggi con gli ultimi aggiornamenti della biblioteca.
Sam,

Per me non ha funzionato. Ho trascorso così tanto tempo a notare che, nel layout, dovrebbe esserci <fragmentinveceFrameLayout
user3448282,

IMO c'è un piccolo ma importante errore nel codice. Dovrebbe esserci FragmentManager fragmentManager = getChildFragmentManager (); invece di getFragmentManager quando si aggiunge SupportMapFragment. Poiché il codice è ora, il frammento di mappa viene sempre aggiunto quando viene chiamato onCreateView (il che è errato, poiché non mantiene lo stato della mappa). Inoltre, chiamerei getMapAsync solo nel ramo mSupportmapFragment == null per eseguire le impostazioni iniziali solo una volta!
user1299412

@utente1299412 amico, puoi modificare il post e aggiornerò semplicemente la risposta. :)
OWADVL il

Quando ho cambiato l' SupportMapFragmentnella MapFragmentnell'attività, ha cambiato il FrameLayoutdentro fragmentnel file di layout e e cambiato il com.google.android.gms.maps.SupportMapFragmentdentro com.google.android.gms.maps.MapFragmentè bene funziona per me. Prima di questi cambiamenti non ha funzionato. Forse questo aiuta gli altri ....
CodeNinja,

10

ecco cosa ho fatto in dettaglio:

Da qui puoi ottenere la chiave API di Google Map

modo alternativo e semplice

prima accedi al tuo account google e visita le librerie google e seleziona l'API Android di Google Maps

Dipendenza trovata nell'attività della mappa predefinita di Android Studio:

compile 'com.google.android.gms:play-services:10.0.1'

inserisci la tua chiave nel file mainifest di Android nell'applicazione come di seguito

in AndroidMainifest.xml apporta queste modifiche:

    // required permission
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


        // google map api key put under/inside <application></application>
        // android:value="YOUR API KEY"
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="AIzasdfasdf645asd4f847sad5f45asdf7845" />

Codice frammento:

public class MainBranchFragment extends Fragment implements OnMapReadyCallback{

private GoogleMap mMap;
    public MainBranchFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view= inflater.inflate(R.layout.fragment_main_branch, container, false);
        SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.main_branch_map);
        mapFragment.getMapAsync(this);
        return view;
    }




     @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
            LatLng UCA = new LatLng(-34, 151);
            mMap.addMarker(new MarkerOptions().position(UCA).title("YOUR TITLE")).showInfoWindow();

            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(UCA,17));

        }
    }

in te frammento xml:

<fragment
                android:id="@+id/main_branch_map"
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context="com.googlemap.googlemap.MapsActivity" />

`gMapFragment.getMapAsync` ha un riferimento irrisolto su getMapAsync. Questo non funziona
Peter Weyand,

sei in attività o frammento?
Dharmx,

questo funziona! ma non sono sicuro se chiamare un frammento all'interno di un frammento sia una buona pratica o no! Si prega di avvisare
AouledIssa il

5

Per il problema di ottenere un NullPointerExceptionquando cambiamo le schede in un FragmentTabHostdevi solo aggiungere questo codice alla tua classe che ha il TabHost. Intendo la classe in cui si inizializzano le schede. Questo è il codice:

/**** Fix for error : Activity has been destroyed, when using Nested tabs 
 * We are actually detaching this tab fragment from the `ChildFragmentManager`
 * so that when this inner tab is viewed back then the fragment is attached again****/

import java.lang.reflect.Field;

@Override
public void onDetach() {
    super.onDetach();
    try {
        Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
        childFragmentManager.setAccessible(true);
        childFragmentManager.set(this, null);
    } catch (NoSuchFieldException e) {
        throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
    }
}

cosa devo importare sul tipo "Campo"? Ci sono molte possibilità
Jeongbebs,

dovrei inviarti il ​​mio progetto? e poi forse dimmi cosa devo fare?
Jeongbebs,

progetto inviato alla tua email.
Jeongbebs,

non hai aggiunto google-play-service.jar al tuo progetto e devi anche cambiare project.properties da "target = android-18" a "target = Google Inc.:API Google: 18"
arshu

1
Questo bug viene rintracciato nel tracker dei problemi di Android Open Source: code.google.com/p/android/issues/detail?id=42601
Kristopher Johnson

4
public class DemoFragment extends Fragment {


MapView mapView;
GoogleMap map;
LatLng CENTER = null;

public LocationManager locationManager;

double longitudeDouble;
double latitudeDouble;

String snippet;
String title;
Location location;
String myAddress;

String LocationId;
String CityName;
String imageURL;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View view = inflater
                .inflate(R.layout.fragment_layout, container, false);

    mapView = (MapView) view.findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);

  setMapView();


 }

 private void setMapView() {
    try {
        MapsInitializer.initialize(getActivity());

        switch (GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(getActivity())) {
        case ConnectionResult.SUCCESS:
            // Toast.makeText(getActivity(), "SUCCESS", Toast.LENGTH_SHORT)
            // .show();

            // Gets to GoogleMap from the MapView and does initialization
            // stuff
            if (mapView != null) {

                locationManager = ((LocationManager) getActivity()
                        .getSystemService(Context.LOCATION_SERVICE));

                Boolean localBoolean = Boolean.valueOf(locationManager
                        .isProviderEnabled("network"));

                if (localBoolean.booleanValue()) {

                    CENTER = new LatLng(latitude, longitude);

                } else {

                }
                map = mapView.getMap();
                if (map == null) {

                    Log.d("", "Map Fragment Not Found or no Map in it!!");

                }

                map.clear();
                try {
                    map.addMarker(new MarkerOptions().position(CENTER)
                            .title(CityName).snippet(""));
                } catch (Exception e) {
                    e.printStackTrace();
                }

                map.setIndoorEnabled(true);
                map.setMyLocationEnabled(true);
                map.moveCamera(CameraUpdateFactory.zoomTo(5));
                if (CENTER != null) {
                    map.animateCamera(
                            CameraUpdateFactory.newLatLng(CENTER), 1750,
                            null);
                }
                // add circle
                CircleOptions circle = new CircleOptions();
                circle.center(CENTER).fillColor(Color.BLUE).radius(10);
                map.addCircle(circle);
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);

            }
            break;
        case ConnectionResult.SERVICE_MISSING:

            break;
        case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED:

            break;
        default:

        }
    } catch (Exception e) {

    }

}

in fragment_layout

<com.google.android.gms.maps.MapView
                android:id="@+id/mapView"
                android:layout_width="match_parent"
                android:layout_height="160dp"                    
                android:layout_marginRight="10dp" />

c'è un modo per spostare il frammento della mappa dietro un altro frammento, ad es. frammento di menu? È in qualche modo rinfrescante e inviare indietro il mio frammento di menu invece di rimanere indietro.
sitilge,

Cosa vuoi fare davvero?
Vaishali Sutariya,

3

Quando aggiungi la tua mappa usa:

getChildFragmentManager().beginTransaction()
    .replace(R.id.menu_map_container, mapFragment, "f" + shabbatIndex).commit();

invece di .adde invece di getFragmentManager.


1

creo semplicemente MapActivity e lo gonfio in frammenti. MapActivity.java:

package com.example.ahmedsamra.mansouratourguideapp;

import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_categories);//layout for container
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.container, new MapFragment())
                .commit();
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }


    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng mansoura = new LatLng(31.037933, 31.381523);
        mMap.addMarker(new MarkerOptions().position(mansoura).title("Marker in mansoura"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(mansoura));
    }
}

activity_map.xml:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.ahmedsamra.mansouratourguideapp.MapsActivity" />

MapFragment.java:-

package com.example.ahmedsamra.mansouratourguideapp;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * A simple {@link Fragment} subclass.
 */
public class MapFragment extends Fragment {


    public MapFragment() {
        // Required empty public constructor
    }


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

}

che cosa? no ..... cosa?
Rexxar

0

Ho una soluzione per NullPointerExceptionquando frammento rimuovere in su DestoryView, basta mettere il codice in onStop()non onDestoryView. Funziona benissimo!

@Override
public void onStop() {
    super.onStop();
    if (mMap != null) {
        MainActivity.fragmentManager.beginTransaction()
                .remove(MainActivity.fragmentManager.findFragmentById(R.id.location_map)).commit();
        mMap = null;
    }
}

0

Secondo https://developer.android.com/about/versions/android-4.2.html#NestedFragments , è possibile utilizzare i frammenti nidificati per raggiungere questo obiettivo chiamando getChildFragmentManager () se si desidera ancora utilizzare il frammento di Google Maps invece del guarda dentro il tuo frammento:

SupportMapFragment mapFragment = new SupportMapFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.content, mapFragment).commit();

dove "contenuto" è il layout principale nel frammento (preferibilmente un FrameLayout). Il vantaggio dell'utilizzo di un frammento di mappa è che il ciclo di vita della mappa viene gestito automaticamente dal sistema.

Anche se la documentazione dice "Non è possibile gonfiare un layout in un frammento quando quel layout include un <frammento>. I frammenti nidificati sono supportati solo quando aggiunti a un frammento in modo dinamico", in qualche modo ho fatto con successo e ha funzionato bene. Ecco il mio codice:
Nel metodo onCreateView () del frammento:

View view = inflater.inflate(R.layout.layout_maps, container, false);
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(...);

Nel layout:

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

Spero che sia d'aiuto!


0

Aggiunta dinamica del frammento di mappa per visualizzare Pager:

Se hai come target un'applicazione precedente al livello API 12 crea un'istanza di SupportedMapFragment e aggiungila all'adattatore della pagina di visualizzazione.

SupportMapFragment supportMapFragment=SupportMapFragment.newInstance();
        supportMapFragment.getMapAsync(this);

API Map livello 12 o superiore supporta oggetti MapFragment

MapFragment mMapFragment=MapFragment.newInstance();
            mMapFragment.getMapAsync(this);

0

Questo è il modo di Kotlin:

In fragment_map.xmldovresti avere:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Nel tuo MapFragment.ktdovresti avere:

    private fun setupMap() {
        (childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?)!!.getMapAsync(this)
    }

Chiamata setupMap()in onCreateView.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.