我正在尝试在用户点击地图时放置一个标记。 我在ActionBarActivity
使用了一个SupportMapFragment
。 但是地图不响应,而且map.setMapType()
操作不起作用。
这是我的代码:
private GoogleMap map; private Marker marker; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ActionBarActivity activity = (ActionBarActivity) getActivity(); activity.getSupportActionBar().setTitle(R.string.select_location); super.onCreateView(inflater, container, savedInstanceState); return inflater.inflate(R.layout.map, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Log.d("Map","On view created"); map = getMap(); map.setMapType(GoogleMap.MAP_TYPE_SATELLITE); map.setOnMapClickListener(new OnMapClickListener() { @Override public void onMapClick(LatLng point) { Log.d("Map","Map clicked"); marker.remove(); drawMarker(point); } }); ... Location location = locationManager.getLastKnownLocation(provider); if(location!=null){ //PLACE THE INITIAL MARKER drawMarker(new LatLng(location.getLatitude(),location.getLongitude())); } }
Logcat显示“创build视图”消息,地图用标记显示当前位置,因此代码的最后一部分正在执行。 但onMapClickListener
是overrided或什么,因为它不工作,地图不是卫星。
有谁能够帮助我?
如果你扩展了SupportMapFragment,你可以简单地做:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ActionBarActivity activity = (ActionBarActivity) getActivity(); activity.getSupportActionBar().setTitle(R.string.select_location); return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); map = getMap(); map.setMapType(GoogleMap.MAP_TYPE_SATELLITE); map.setOnMapClickListener(new OnMapClickListener() { @Override public void onMapClick(LatLng point) { Log.d("Map","Map clicked"); marker.remove(); drawMarker(point); } });
请注意,如果您不使用自定义布局inflater.inflate(R.layout.map, container, false)
则在onActivityCreated
调用getMap(),并且不需要inflater.inflate( inflater.inflate(R.layout.map, container, false)
。
你甚至不需要map.xml布局!
您正在扩展SupportMapFragment
但是您正在扩充另一个MapView
(不是默认绑定到SupportMapFragment
的那个MapView
),这就是为什么您没有查看地图中的更改。 因为你是从getMap()
获得的默认View
,但你正在查看另一个。 查看关于getMap()的文档 :
public final GoogleMap getMap ()
获取与此片段包装的视图绑定的底层GoogleMap。
希望能帮助到你 ;)
那么你正在为你的地图放置一个监听器,但是你需要为你的监听器做一个监听器。
map.setOnMarkerClickListener(this); ... @Override public boolean onMarkerClick(Marker arg0) { Log.i(TAG,"marker arg0 = "+arg0); return false; }
或者在标记之上的InfoWindows:
map.setOnInfoWindowClickListener(this);
此外,你的地图初始化显示卫星几乎是正确的:
map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
将其更改为:
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
而不是做map = getMap(),几行后我有这样的代码:
SupportMapFragment fm = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map); map = fm.getMap();
所以我只是把代码放在那一行上面,然后就完成了。
而不是做map = getMap(),你可以试试这个。
if (map == null) { // Try to obtain the map from the SupportMapFragment. this.map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapView)) .getMap(); setUpMap(lat, longi, R.drawable.marker2, title); } private void setUpMap(double lat, double lng, int drawableResource, String title) { if(map != null) { marker = map.addMarker(new MarkerOptions().position(new LatLng(lat, lng)) .title(title) .icon(BitmapDescriptorFactory.fromResource(drawableResource))); geocoder = new Geocoder(this, Locale.getDefault()); map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 15)); map.animateCamera(CameraUpdateFactory.zoomTo(13), 2500, null); } }