29

Próbuję wyświetlić prostą mapę za pomocą interfejsu Google map API v2 w aplikacji na Androida. Postępuję zgodnie z instrukcjami Map API Documentation. Ale myślę, że onMapReady nie wywołuje z jakiegoś powodu. Używam google-play-services_lib wersja 6587000. Mój telefon ma google-play-services_lib wersja 6587038, jak sądzę.onMapReady nie dzwoni, nawet jeśli mapa wyświetla się bezbłędnie

Mapa Google działa z początkowymi kontrolkami. Czy ktoś może mi pomóc skorygować ten błąd?

public class MapDisplay extends FragmentActivity 
implements OnMapReadyCallback { 

private GoogleMap mMap; 
private Location mCurrentLocation; 
private MarkerOptions mMarkerOptions ; 
    private MapFragment mMapFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.location_map); 

    /** not needed 
      mMapFragment = MapFragment.newInstance(); 
      FragmentTransaction fragmentTransaction = 
        getFragmentManag 

er().beginTransaction(); 
      fragmentTransaction.add(R.id.map, mMapFragment); 
      fragmentTransaction.commit();*/ 

    /**corrected code*/ 
      MapFragment mapFragment = (MapFragment) getFragmentManager() 
        .findFragmentById(R.id.map); 
       mapFragment.getMapAsync(this); 

} 


@Override 
public void onMapReady(GoogleMap map) { 

    toast("Map ready"); 
    Log.d("--***** MAP ","::Map ready"); 

    LatLng sydney = new LatLng(-33.867, 151.206); 

    map.setMyLocationEnabled(true); 
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13)); 

    map.addMarker(new MarkerOptions() 
      .title("Sydney") 
      .snippet("The most populous city in Australia.") 
      .position(sydney)); 


    } 

private void toast(String text){ 
     Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); 
     toast.show(); 
    } 

    } 

plik location_map.xml

<?xml version="1.0" encoding="utf-8"?> 
<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"/> 

Odpowiedz

61

AFAIK, onMapReady() jest wyzwalany przez wywołanie getMapAsync() na swojej MapFragment, i nie widzę gdzie dzwonisz, że.

+1

Dodane getMapAsync(). teraz onMapReady działa. – SAN

+1

@SAN: "getMapAsync() throw and error" - wtedy być może powinieneś rozważyć zadanie pytania o przepełnienie stosu, aby uzyskać pomoc w przypadku jakiegokolwiek problemu. "więc musiałem użyć" - tak? AFAIK, nadal musisz wywołać 'getMapAsync()'. Co więcej, teraz masz * dwie * instancje 'MapFragment'. Oto przykładowy projekt demonstrujący użycie 'getMapAsync()' ze statycznym 'MapFragment': https://github.com/commonsguy/cw-omnibus/tree/master/MapsV2/NooYawk – CommonsWare

+1

To będzie pomocne dla someOne jeśli w xml pojawi się Nepster

10

Aby połączyć OnMapReady(GoogleMap map), dołącz do swojej następujące metody onCreate(...):

MapFragment mapFragment = (MapFragment) 
    getFragmentManager().findFragmentById(R.id.map); 

następnie dodać:

// This calls OnMapReady(..). (Asynchronously) 
mapFragment.getMapAsync(MapDisplay.this); 
+0

Zauważ MapDisplay.this w swoim argumencie, na wypadek gdybyś miał wiele takich klas jak ja. Bezpieczniej jest nazwać klasę. – FlorianB