Android 安卓谷歌地图v2:点击侦听器未响应

Android 安卓谷歌地图v2:点击侦听器未响应,android,google-maps,google-maps-android-api-2,Android,Google Maps,Google Maps Android Api 2,当用户单击地图时,我试图放置一个标记。我正在ActionBarActivity中使用SupportMapFragment。但是映射没有响应,而且map.setMapType()操作不起作用 这是我的密码: private GoogleMap map; private Marker marker; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle save

当用户单击地图时,我试图放置一个标记。我正在
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显示“on view created”(打开视图已创建)消息,地图用标记显示当前位置,因此代码的最后一部分正在执行。但是
onmaclicklistener
被覆盖了,或者是因为它不工作,而且地图不是卫星


有人能帮我吗?

几行之后,我没有执行map=getMap(),而是执行以下代码:

        SupportMapFragment fm = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
        map = fm.getMap();

因此,我刚刚将代码放在该行上方,就完成了。

如果您有扩展的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);
    }
});
请注意,getMap()是在创建的活动和充气器中调用的。如果不使用自定义布局,充气(R.layout.map,container,false)

您甚至不需要map.xml布局

您正在扩展
SupportMapFragment
,但正在扩展另一个
MapView
(默认情况下不是绑定到
SupportMapFragment
的那一个),这就是为什么您没有查看地图中的更改。因为您是根据从
getMap()
获取的默认
视图操作的,但您正在查看另一个视图。见:

获取绑定到此包装的视图的基础GoogleMap 碎片


希望有帮助;)

不必执行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);
    }
}

您正在为地图放置一个侦听器,但是您需要为标记创建一个侦听器

map.setOnMarkerClickListener(this);

...

@Override
public boolean onMarkerClick(Marker arg0) {     
    Log.i(TAG,"marker arg0 = "+arg0);               
    return false;
}
或者对于标记顶部的信息窗口:

map.setOnInfoWindowClickListener(this);

此外,您对地图的初始化使其显示卫星几乎是正确的:

map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
将其更改为:

map.setMapType(GoogleMap.MAP_TYPE_HYBRID);

嗨,乔恩!我认为您可以用一种更简单的方式来做,因为您已经在SupportMapFragment中,不需要获取片段(当您从FragmentActivity调用时,它很有用)。我补充了一个答案。谢谢约苏阿达斯!关键是我需要膨胀XML,因为它不是一个只有地图的视图。我认为仍然有必要扩展SupportMapFragment,不是吗?Ez horregatik!在我看来,在这种情况下,您不应该扩展SupportMapFragment,而应该扩展Fragment(来自支持库)。请参阅此链接:另一种可能是将SupportMapFragment添加到FragmentActivity,只占用地图的空间。F.i.在FragmentActivity布局中将FrameLayout用作容器:
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);