我在更新我的SDK 今天之前有了工作代码(以便将来参考问题日期)。 .getMap
曾用过警告它已被弃用,但现在它甚至都没有被识别为有效输入。我假设这已经发生,因为API 24(Android Nougat)的新版本。这里没有进一步的代码:
private boolean initMap() {
if (mMap == null) {
MapFragment mapFrag =
(MapFragment) getFragmentManager().findFragmentById(R.id.map);
mMap = mapFrag.getMapAsync();
}
return (mMap != null);
}
如果有人可以帮我改变整合.getMapAsync()
,我会非常感激。
谢谢!
更新:在查看答案中的建议之后,这是新的和更新的代码(这不在onCreate中) -
private boolean initMap() {
if (mMap == null) {
MapFragment mapFrag = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFrag.getMapAsync(this);
}
return (mMap != null);
}
@Override
public void onMapReady(GoogleMap googleMap) {
if (googleMap != null) {
mMap = googleMap;
}
}
答案 0 :(得分:1)
你需要什么:
您的gradle文件中的 1。compile 'com.google.android.gms:play-services-maps:9.2.0'
(最新的地图库),如果您无法使用它,则可能需要下载最新的工具。
2.加载地图片段的活动必须实现OnMapReadyCallback
。 (这是最简单的方法,您可以创建一个实现OnMapReadyCallback
)的其他类。
3.在活动onCreate
方法中,您需要执行以下操作:
@Override
protected void onCreate(Bundle savedInstanceState) {
/// additiona code here
MapFragment mapFrag = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
mapFrag.getMapAsync(this); //this is instance of your activity.
//maybe code here
}
//callback method from OnMapReadyCallback
@Override
public void onMapReady(GoogleMap googleMap) {
if (googleMap != null) {
mMap = googleMap;
//now the map is loaded, you can use it
}
}
编辑代码后编辑
您的initMap
错误,它无法返回boolean
值,因为getMapAsync
就像名称所示,异步,这意味着该方法将被执行并且它将立即返回,而不是等待完成,因此return (mMap != null);
几乎总是会返回false
。您应该使用onMapReady
检查地图是否已加载。
答案 1 :(得分:1)
你需要像这样打电话
mapFrag = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFrag.getMapAsync(this);
并使你的actifity(例如)实现OnMapReadyCallback。 然后覆盖onMapReady(GoogleMap googleMap)上的回调方法