Android:片段LongPressClick上的GoogleMaps不起作用

时间:2015-06-01 15:51:36

标签: android google-maps android-fragments

我想在地图上添加一个新标记但是在MapLongClick上的方法没有用。 我的代码如下。我把我的地图放在一个片段里。

public class Fragment_maps extends android.support.v4.app.Fragment 
implements OnMapLongClickListener, OnMapClickListener{ 

MapView mMapView; 
private GoogleMap googleMap; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                         Bundle savedInstanceState) { 
    // inflate and return the layout 
    View v = inflater.inflate(R.layout.fragment_maps, container, 
            false); 
    mMapView = (MapView) v.findViewById(R.id.map); 
    mMapView.onCreate(savedInstanceState);
    //activate menu button
    setHasOptionsMenu(true);

    mMapView.onResume();// needed to get the map to display immediately 

    try { 
        MapsInitializer.initialize(getActivity().getApplicationContext()); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    }

    //get the map
    googleMap = mMapView.getMap();
    // Detect location
    googleMap.setMyLocationEnabled(true);
    //googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    // Turns traffic layer on
    googleMap.setTrafficEnabled(true);
    // Enables indoor maps
    googleMap.setIndoorEnabled(true);
    // Enables indoor maps
    googleMap.setIndoorEnabled(true);
    // Turns on 3D buildings
    googleMap.setBuildingsEnabled(true);
    // Show Zoom buttons
    googleMap.getUiSettings().setZoomControlsEnabled(true);
    // latitude and longitude 
    double latitude = 40.639350; 
    double longitude = 22.944607;


    // create marker 
    MarkerOptions thessaloniki = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Thessaloniki");
    //----------------
    MarkerOptions LeykosPyrgos = new MarkerOptions().position(new LatLng(40.626401, 22.948352)).title("Leykos Pyrgos");

    // Changing marker icon 
    thessaloniki.icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
    //----------------
    LeykosPyrgos.icon(BitmapDescriptorFactory .fromResource(R.drawable.whitetower));

    // adding marker 
    googleMap.addMarker(thessaloniki); 
    CameraPosition cameraPositionThess = new CameraPosition.Builder() .target(new LatLng(40.639350, 22.944607)).zoom(12).build(); 
    googleMap.animateCamera(CameraUpdateFactory .newCameraPosition(cameraPositionThess));
    //----------------
    googleMap.addMarker(LeykosPyrgos); 
    CameraPosition cameraPositionLeykosPyrgos = new CameraPosition.Builder() .target(new LatLng(40.626401, 22.948352)).zoom(12).build(); 
    googleMap.animateCamera(CameraUpdateFactory .newCameraPosition(cameraPositionLeykosPyrgos));


    // Perform any camera updates here 
    return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.fragment_maps, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Log.d("onOptionsItemSelected","yes");
    switch (item.getItemId()) {
    case R.id.HYBRID:
        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);;
        return true;
    case R.id.SATELLITE:
        googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
        return true;
    case R.id.TERRAIN:
        googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        return true;
    case R.id.NORMAL:
        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}

@Override
public void onMapClick(LatLng point) {
    Toast.makeText(getActivity(),point.toString(),Toast.LENGTH_SHORT).show();
    googleMap.animateCamera(CameraUpdateFactory.newLatLng(point));
}

@Override 
public void onMapLongClick(LatLng point) {
    googleMap.addMarker(new MarkerOptions()
        .position(point)
        .title("You are here")           
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));  
}

@Override 
public void onResume() { 
    super.onResume(); 
    mMapView.onResume(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    mMapView.onPause(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    mMapView.onDestroy(); 
} 

@Override 
public void onLowMemory() { 
    super.onLowMemory(); 
    mMapView.onLowMemory(); 
} 

}

正如您所看到的,我同时拥有onMapClickonMapLongClick方法,但当我点击地图时,没有任何反应。我还实施了OnMapLongClickListenerOnMapClickListener。我究竟做错了什么? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的类实现了侦听器,但您没有设置它:

googleMap.setOnMapLongClickListener(this);

与普通点击监听器相同:

googleMap.setOnMapClickListener(this);