用getMapAsync替换getMap

39

我想用getMapAsync方法替换已弃用的getMap方法,但是我没有使用MapFragment而是像这样使用GoogleMap

private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);

    try {
        if(googleMap == null) {
            googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
        }
        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        googleMap.setMyLocationEnabled(true);
        googleMap.setTrafficEnabled(true);
        googleMap.setIndoorEnabled(true);
        googleMap.setBuildingsEnabled(true);
        googleMap.getUiSettings().setZoomControlsEnabled(true);

如果我像这样将googleMap替换为MapFragment,我将无法再使用setMapType等功能。 那么在我的情况下,我该如何改用getMapAsync

MapFragment mapFragment = (MapFragment) getFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
4个回答

62

就像官方文档中所说,获取异步地图需要一个回调函数;在那里,你可以找到Google Maps相关的"主入口点"!

public class MapPane extends Activity implements OnMapReadyCallback {

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

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

    @Override
    public void onMapReady(GoogleMap map) {
        // DO WHATEVER YOU WANT WITH GOOGLEMAP
        map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        map.setMyLocationEnabled(true);
        map.setTrafficEnabled(true);
        map.setIndoorEnabled(true);
        map.setBuildingsEnabled(true);
        map.getUiSettings().setZoomControlsEnabled(true);
    }
}

36

非常简单,只需让您的Activity实现OnMapReadyCallback接口,然后在onMapReady()回调中分配您的googleMap引用即可。

然后,对googleMap执行任何您想要的操作。

这里是一个简单的示例:

public class MainActivity extends Activity implements OnMapReadyCallback {

    private GoogleMap googleMap;

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

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

        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {

        googleMap = map;

        setUpMap();

    }

    public void setUpMap(){

        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        googleMap.setMyLocationEnabled(true);
        googleMap.setTrafficEnabled(true);
        googleMap.setIndoorEnabled(true);
        googleMap.setBuildingsEnabled(true);
        googleMap.getUiSettings().setZoomControlsEnabled(true);
    }


}

2
如果你使用MapFragment,你仍然可以使用stMapType方法。在你的活动中实现OnMapReadyCallback接口。 创建MapFragment并在该对象上调用getAsyncMap方法。 它会要求你实现onMapReady(GoogleMap map)方法,你可以在那里设置地图类型等。 希望对你有所帮助。

0
我发现更好的理解getMapAsync的方法是在Android Studio中创建一个新项目,使用Google地图活动模板而不是空活动模板。
这样你就会有一个可以研究和适应自己的项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接