6

SupportMapFragment에서지도를 가져 오려고하지만 null을 반환합니다. 프래그먼트가 아직 완전히 표시되지 않았으므로지도가 존재하지 않기 때문에 내가 읽은 바가있을 수 있습니다. executePendingTransactions()를 사용하여 수정했지만 지금까지 성공하지 못했습니다.mapFragment.getMap()이 null을 반환합니다.

아이디어를 고치는 방법은 무엇입니까?

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

그것은 내가이가 있기 때문에 될 수 읽은 내용에서 다음 로그

V/FragmentManager(24224): add: SupportMapFragment{4078c4b8 id=0x7f06003d} 
V/FragmentManager(24224): Allocated fragment index SupportMapFragment{4078c4b8 #1 id=0x7f06003d} 
V/FragmentManager(24224): moveto CREATED: SupportMapFragment{4078c4b8 #1 id=0x7f06003d} 
D/EMR  (24224): map should have been initialized 
D/EMR  (24224): map still null 
+0

에 명시된 바와 같이 단편에서 작동하는 데 사용할? – yugidroid

+0

예 (코드 부분 편집, 위 참조) 예 : – cos4

+0

초기화 되었습니까? 그렇지 않으면 아무것도 없으며, 즉 'null'입니다. – yugidroid

답변

1

를 반환 여기

코드

private GoogleMap map; 
private SupportMapFragment mapFragment; 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    //... 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.screen_mission2); 
    GoogleMapOptions mapOptions = new GoogleMapOptions(); 

    mapOptions.mapType(GoogleMap.MAP_TYPE_NORMAL) 
     .compassEnabled(true) 
     .rotateGesturesEnabled(false) 
     .tiltGesturesEnabled(false); 

    android.support.v4.app.FragmentManager myFragmentManager = getSupportFragmentManager(); 
    android.support.v4.app.FragmentManager.enableDebugLogging(true); 
    mapFragment = SupportMapFragment.newInstance(mapOptions); 
    FragmentTransaction fragmentTransaction = myFragmentManager.beginTransaction(); 
    fragmentTransaction.add(R.id.mapFragment, mapFragment); 
    fragmentTransaction.commit(); 
    myFragmentManager.executePendingTransactions(); 

    if(mapFragment == null) Base.log("mapFragment==null"); 
    if(map==null){ 
     map = mapFragment.getMap(); 
     Base.log("map should have been initialized"); 
     if(map==null) Base.log("map still null"); 
    } 
} 

그리고 레이아웃 파일입니다 조각이 아직 완전히 표시되지 않았으므로지도가 없습니다.

수정.

의견을 수정하는 방법은 무엇입니까?

사실 setContentView()를 호출하여, 레이아웃 파일을 사용하고있는 모든 FragmentTransaction 물건을 없애. 그런 다음 SupportMapFragment 이미 만들어를 검색하고 사용할 수 있습니다 :

setContentView(R.layout.activity_main); 

SupportMapFragment mapFrag=(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment); 
+0

감사합니다. 그 점에 대해 생각했지만 코드에서 GoogleMapOptions에 지정된 옵션을 설정 한 다음 XML 파일에 저장하거나 나중에 설정할 수 있습니까? – cos4

+0

@ cos4 : Eclipse에는 일부 Eclipse/ADT 버그로 인해 Eclipse에서 문제를 사용할 때 문제가보고되었지만 XML에는 해당 항목이 있습니다. 그래도 작동하지 않는다면 XML의'SupportMapFragment'를 제거하고'FrameLayout'으로 바꾸고 기존의'FragmentTransaction'을 사용하여 ('FrameLayout'에 조각을 붓습니다), 그런 다음 'GoogleMap'을 약간 사용하십시오 (예,'SupportMapFragment'를 서브 클래스로 만들고 onActivityCreated()에 코드를 넣으십시오). – CommonsWare

+0

XML의지도에 대한 옵션 설정에 관한 문서가 있습니까? 찾을 수 없습니다 ... 그렇지 않으면 SupportMapFragment 서브 클래 싱해야 어쨌든 나는 또한 onActivityCreated()에서 의도를 보낼 수 내 현재 활동에서 잡을! – cos4

14

가 참조하는 모든 코드를 이동하십시오 당신의 GoogleMaponStart() 또는 onResume(). 프래그먼트가 onCreateView (link)을 통과 할 때까지지도 조각의지도가 인스턴스화되지 않습니다. 이는 부모 작업이 onCreate()을 통과 한 후에 발생합니다. 또한 null에 대해 GoogleMap을 확인해야합니다. Google Play 서비스가 설치되어 있지 않거나 다른 이유로지도를 사용할 수 없으므로 null이됩니다.

+0

이것은 지금까지 가장 간단한 해결책 인 것 같습니다, 감사합니다! –

+0

+1을 설명하는 이유는 무엇입니까? 뿐만 아니라 "무엇?". –

1
당신은 OnMapReadyCallback을 구현해야

, 그 public void onMapReady(GoogleMap map)을 정의하고 다음은`mapFragment` 변수를 선언 한 Google API