Android谷歌地图v2:单击监听器没有响应

我正在尝试在用户点击地图时放置一个标记。 我在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或什么,因为它不工作,地图不是卫星。

有谁能够帮助我?

Solutions Collecting From Web of "Android谷歌地图v2:单击监听器没有响应"

如果你扩展了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); } }