将 getMap 替换为 getMapAsync
Posted
技术标签:
【中文标题】将 getMap 替换为 getMapAsync【英文标题】:Replace getMap with 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);
【问题讨论】:
【参考方案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 活动的模板而不是空活动。
您将有一个项目来研究和适应您自己的项目。
【讨论】:
以上是关于将 getMap 替换为 getMapAsync的主要内容,如果未能解决你的问题,请参考以下文章