即使地图显示没有任何错误,onMapReady 也不会调用
Posted
技术标签:
【中文标题】即使地图显示没有任何错误,onMapReady 也不会调用【英文标题】:onMapReady not calling even though the map display without any error 【发布时间】:2015-02-16 07:44:57 【问题描述】:我正在尝试在 android 应用程序中使用 Google 地图 API v2 显示一个简单的地图。我正在遵循Map API Documentation 的说明。但我认为onMapReady
出于某种原因没有打电话。我正在使用google-play-services_lib
版本6587000
。我的手机有google-play-services_lib
verion 6587038
,我相信。
Google 地图正在使用初始控件。有人可以帮我纠正这个错误吗?
public class MapDisplay extends FragmentActivity
implements OnMapReadyCallback
private GoogleMap mMap;
private Location mCurrentLocation;
private MarkerOptions mMarkerOptions ;
private MapFragment mMapFragment;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.location_map);
/** not needed
mMapFragment = MapFragment.newInstance();
FragmentTransaction fragmentTransaction =
getFragmentManag
er().beginTransaction();
fragmentTransaction.add(R.id.map, mMapFragment);
fragmentTransaction.commit();*/
/**corrected code*/
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
@Override
public void onMapReady(GoogleMap map)
toast("Map ready");
Log.d("--***** MAP ","::Map ready");
LatLng sydney = new LatLng(-33.867, 151.206);
map.setMyLocationEnabled(true);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));
map.addMarker(new MarkerOptions()
.title("Sydney")
.snippet("The most populous city in Australia.")
.position(sydney));
private void toast(String text)
Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
toast.show();
location_map.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.google.android.gms.maps.MapFragment"
android:id="@+id/map"
android:layout_
android:layout_/>
【问题讨论】:
【参考方案1】:AFAIK,onMapReady()
是由在您的 MapFragment
上调用 getMapAsync()
触发的,我看不出您在哪里调用它。
【讨论】:
@SAN: "getMapAsync() throw and error" -- 那么也许你应该考虑问一个 Stack Overflow 问题来帮助你解决你遇到的任何问题。 “所以我不得不使用”——所以? AFAIK,您仍然需要致电getMapAsync()
。此外,现在您有 两个 MapFragment
实例。这是一个示例项目,演示了 getMapAsync()
与静态 MapFragment
的使用:github.com/commonsguy/cw-omnibus/tree/master/MapsV2/NooYawk
如果在 xml 中您的 要调用OnMapReady(GoogleMap map)
,请将以下内容附加到您的onCreate(...)
方法中:
MapFragment mapFragment = (MapFragment)
getFragmentManager().findFragmentById(R.id.map);
然后,添加:
// This calls OnMapReady(..). (Asynchronously)
mapFragment.getMapAsync(MapDisplay.this);
【讨论】:
注意他的论点中的 MapDisplay.this,以防你有多个像我这样的类。命名类更安全。【参考方案3】:添加:
mMap = map
以上onMapReady
【讨论】:
以上是关于即使地图显示没有任何错误,onMapReady 也不会调用的主要内容,如果未能解决你的问题,请参考以下文章
FragmentContainerView 中未调用/显示 OnMapReady
Map Fragment(Kotlin)onMapReady无法正常工作
如何在 Android 中的 onMapReady() 之外添加 Google 地图标记?