Android Google Maps v2:点击监听器没有响应

Jon*_*itu 7 android google-maps google-maps-android-api-2

我正在尝试在用户点击地图时添加标记.我正在使用SupportMapFragment内部ActionBarActivity.但是地图没有响应,此外,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()));
        }
}
Run Code Online (Sandbox Code Playgroud)

Logcat显示"on view created"消息,地图用标记显示当前位置,因此代码的最后部分正在执行.但是onMapClickListener由于它不起作用而被覆盖或者某种东西,并且地图不是卫星.

有谁能够帮我?

jos*_*das 15

如果你有扩展的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);
    }
});
Run Code Online (Sandbox Code Playgroud)

请注意,如果不使用自定义布局,则调用getMap()onActivityCreated并且inflater.inflate(R.layout.map, container, false)不需要.

你甚至不需要map.xml布局!

您正在扩展,SupportMapFragment但是您正在为另一个MapView(不是SupportMapFragment默认情况下绑定的那个)充气,这就是您没有在地图中查看更改的原因.因为你是默认View获得的,getMap()但你正在查看另一个.查看有关getMap()文档:

public final GoogleMap getMap ()
Run Code Online (Sandbox Code Playgroud)

获取与此片段包装的视图关联的基础GoogleMap.

希望能帮助到你 ;)