如何在Android中的onMapReady()之外添加Google地图标记?
我有以下函数返回设备的当前位置:
void getCurrentLocation()
{
Location myLocation = map.getMyLocation();
if(myLocation!=null)
{
double dLatitude = myLocation.getLatitude();
double dLongitude = myLocation.getLongitude();
map.addMarker(new MarkerOptions().position(new LatLng(dLatitude, dLongitude))
.title("My Location").icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(dLatitude, dLongitude), 8));
}
else
{
Toast.makeText(this, "Unable to fetch the current location", Toast.LENGTH_SHORT).show();
}
}
但有些方法显示为红色,因为它是未定义的:
正如你可以注意到的,这些方法与map有关,它在onMapReady()函数中工作,但在它之外显示它无法识别。 这是为什么? 我必须添加哪些库? 我这样宣布地图:
private MapFragment map;
以下是您的通用代码结构应该看起来像什么。 重要的部分是将您的本地map
引用分配给onMapReady()
回调onMapReady()
返回的map
引用。
public class MainActivity extends Activity
implements OnMapReadyCallback {
private GoogleMap map;
@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 retMap) {
map = retMap;
setUpMap();
}
public void setUpMap(){
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
map.setMyLocationEnabled(true);
}
void getCurrentLocation()
{
Location myLocation = map.getMyLocation();
if(myLocation!=null)
{
double dLatitude = myLocation.getLatitude();
double dLongitude = myLocation.getLongitude();
map.addMarker(new MarkerOptions().position(new LatLng(dLatitude, dLongitude))
.title("My Location").icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(dLatitude, dLongitude), 8));
}
else
{
Toast.makeText(this, "Unable to fetch the current location", Toast.LENGTH_SHORT).show();
}
}
}
你为什么使用
private MapFragment map;
你的地图应该是类型的
com.google.android.gms.maps.GoogleMap
只是改变
private MapFragment map;
至
private GoogleMap map;
并获得如下图所示的地图:
map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
它会正常工作。
链接地址: http://www.djcxy.com/p/90647.html上一篇: How to add Google Map Markers outside of onMapReady() in Android?
下一篇: how to solve Null pointer exception on Getting latitude or GPS?