29

Android 애플리케이션에서 Google지도 API v2를 사용하여 간단한지도를 표시하려고합니다. Map API Documentation 지침을 따르고 있습니다. 그러나 나는 onMapReady이 어떤 이유로 전화하지 않는다고 생각합니다. 나는 google-play-services_lib 버전 6587000을 사용하고 있습니다. 제 휴대 전화는 google-play-services_lib ver365 6587038입니다.지도가 오류없이 표시 되더라도 onMapReady가 호출되지 않습니다.

Google지도는 초기 컨트롤을 사용합니다. 누군가이 오류를 해결하도록 도와 줄 수 있습니까?

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(); 
    } 

    } 

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"/> 

답변

61

AFAIK는 onMapReady()은 당신의 MapFragmentgetMapAsync()의 호출에 의해 트리거됩니다, 그리고 당신이 그것을 요구하고있다 어디서 볼 수 없습니다. OnMapReady(GoogleMap map) 전화를

+1

추가 getMapAsync을(). 지금 onMapReady가 작동 중입니다. – SAN

+1

@SAN : "getMapAsync() throw and error"- 아마도 Stack Overflow 질문을 통해 문제가 발생한 문제에 대한 도움을 얻는 방법을 고려해야합니다. "그래서 나는 사용해야했다"- 그래서? AFAIK, 당신은 여전히'getMapAsync()'를 호출 할 필요가있다. 게다가 이제는 두 개의 * MapFragment 인스턴스가 있습니다. 다음은'getMapAsync()'를 정적'MapFragment'와 함께 사용하는 예제 프로젝트입니다 : https://github.com/commonsguy/cw-omnibus/tree/master/MapsV2/NooYawk – CommonsWare

+1

someOne에 도움이 될 것입니다. 그렇지 않으면 xml에서 Nepster

10

이, 당신의 onCreate(...) 방법에 다음과 같은 추가 :

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

을 한 후, 추가

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

나 같은 여러 클래스가있는 경우를 대비하여 MapDisplay.this를 그의 인수에 유의하십시오. 반원들에게 이름을 지어주는 것이 더 안전합니다. – FlorianB

관련 문제