mapFragment.getMap()返回null

时间:2013-07-21 10:52:41

标签: android google-maps-api-2 google-play-services supportmapfragment

我正在尝试从SupportMapFragment获取地图,但它返回null。从我读到的这可能是因为片段尚未完全显示,因此没有地图存在?!我尝试使用executePendingTransactions()修复它,但到目前为止没有成功。

任何想法如何解决?

这是代码

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

布局文件:

<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

3 个答案:

答案 0 :(得分:14)

尝试将引用GoogleMap的所有代码移至onStart()onResume()。直到片段经过onCreateViewlink)之后才会实例化地图片段中的地图,这在父活动经过onCreate()之后发生。另外,您需要检查GoogleMap null是否null,因为如果未安装Google Play服务,或者由于其他原因导致地图无法使用,则会{{1}}

答案 1 :(得分:1)

  

从我读到的内容可能是因为片段尚未完全显示,因此不存在地图?

正确。

  

任何想法如何解决?

实际使用布局文件,通过调用setContentView(),并删除所有FragmentTransaction内容。然后,您可以检索已创建的SupportMapFragment并使用它:

setContentView(R.layout.activity_main);

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

答案 2 :(得分:1)

您必须实施OnMapReadyCallback,定义其public void onMapReady(GoogleMap map)并使用它来操作片段,如Google API

中所述