web-dev-qa-db-fra.com

Google Maps Android API v2 détecte un clic long sur la carte et ajoute un marqueur qui ne fonctionne pas

Je veux ajouter un marqueur sur la carte avec un long clic. Mais ça ne fonctionne pas. le clic normal fonctionne. Toast in onMapClick() est affiché avec une frappe normale. mais clic long ne fonctionne pas. Toast in onMapLongClick() n'est pas affiché avec un clic long. le marqueur n'est pas non plus affiché sur la carte.

J'utilise SupportMapFragment parce que je veux utiliser mon application sur des appareils Android 2.x. J'ai testé mon application sur Nexus One, sous Android 2.3.7.

Ceci est mon code.

public class MainActivity extends FragmentActivity implements
        OnMapClickListener, OnMapLongClickListener {

    final int RQS_GooglePlayServices = 1;
    private GoogleMap myMap;

    Location myLocation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager myFragmentManager = getSupportFragmentManager();
        SupportMapFragment mySupportMapFragment = (SupportMapFragment) myFragmentManager
                .findFragmentById(R.id.map);
        myMap = mySupportMapFragment.getMap();

        myMap.setMyLocationEnabled(true);

        myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        // myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        // myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
        // myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);

        myMap.setOnMapClickListener(this);
        myMap.setOnMapLongClickListener(this);

    }

    @Override
    protected void onResume() {
        super.onResume();

        int resultCode = GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(getApplicationContext());

        if (resultCode == ConnectionResult.SUCCESS) {
            Toast.makeText(getApplicationContext(),
                    "isGooglePlayServicesAvailable SUCCESS", Toast.LENGTH_LONG)
                    .show();
        } else {
            GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                    RQS_GooglePlayServices);
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onMapClick(LatLng point) {

        myMap.animateCamera(CameraUpdateFactory.newLatLng(point));

        Toast.makeText(getApplicationContext(), point.toString(),
                Toast.LENGTH_LONG).show();


    }

    @Override
    public void onMapLongClick(LatLng point) {

        myMap.addMarker(new MarkerOptions().position(point).title(
                point.toString()));

        Toast.makeText(getApplicationContext(),
                "New marker added@" + point.toString(), Toast.LENGTH_LONG)
                .show();

    }

}

Comment puis-je résoudre ça ?

11
Bishan

J'ai utilisé ça. Ça a marché.

GoogleMap gm;

gm.setOnMapLongClickListener(this); 

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

    // Setting a click event handler for the map
    googleMap.setOnMapClickListener(new OnMapClickListener() {

        @Override
        public void onMapClick(LatLng latLng) {

            // Creating a marker
            MarkerOptions markerOptions = new MarkerOptions();

            // Setting the position for the marker
            markerOptions.position(latLng);

            // Setting the title for the marker.
            // This will be displayed on taping the marker
            markerOptions.title(latLng.latitude + " : " + latLng.longitude);

            // Clears the previously touched position
            googleMap.clear();

            // Animating to the touched position
            googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));

            // Placing a marker on the touched position
            googleMap.addMarker(markerOptions);
        }
    });

OU

mMap.setOnMapLongClickListener(new
           GoogleMap.OnMapLongClickListener() {
        @Override
        public void onMapLongClick (LatLng latLng){
           Geocoder geocoder =
              new Geocoder(MapMarkerActivity.this);
           List<Address> list;
           try {
              list = geocoder.getFromLocation(latLng.latitude,
                 latLng.longitude, 1);
           } catch (IOException e) {
              return;
           }
           Address address = list.get(0);
           if (marker != null) {
              marker.remove();
           }

           MarkerOptions options = new MarkerOptions()
              .title(address.getLocality())
              .position(new LatLng(latLng.latitude,
                 latLng.longitude));

           marker = mMap.addMarker(options);
        }
     });
1
SAndroidD

Vous n'avez aucune icône configurée. Essayer:

    @Override
    public void onMapLongClick(LatLng point) {

        myMap.addMarker(new MarkerOptions()
            .position(point)
            .title(point.toString())
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 

         Toast.makeText(getApplicationContext(),
            "New marker added@" + point.toString(), Toast.LENGTH_LONG)
            .show();

} 
1
Luigi Blu