【问题标题】:Replace getMap with getMapAsync将 getMap 替换为 getMapAsync
【发布时间】:2015-10-01 00:55:19
【问题描述】:

我想用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);

【问题讨论】:

    标签: android google-maps google-maps-android-api-2


    【解决方案1】:

    在官方文档中,获取地图异步需要回调; 它就是你的谷歌地图的“主要入口点”!

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

    【讨论】:

      【解决方案2】:

      很简单,只要让你的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);
          }
      
      
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          我发现了解 getMapAsync 使用的更好方法是在 Android Studio 中创建一个新项目并使用 google maps 活动的模板而不是空活动。

          您将有一个项目来研究和适应您自己的项目。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-10-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-04
            • 2015-01-14
            相关资源
            最近更新 更多