Search code examples
androidopenstreetmaposmdroid

Map events are never called


I'm trying to put a marker when the user taps or long pressed somewhere in the map, I put a toast in the method singleTapConfirmedHelperand logs in longPressHelper to know what happens and I noticed that these methods are never called, what I'm doing wrong? I'm using latest osmdroid and osmbonuspack versions and runs well, here's my code:

public class MapActivity3 extends AppCompatActivity implements MapEventsReceiver {
MapView map;
TextView tv;
ArrayList<OverlayItem> overlayItemArray;

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

    tv=(TextView)findViewById(R.id.textView);

    map = (MapView) findViewById(R.id.map);
    map.setTileSource(TileSourceFactory.MAPNIK);

    map.setBuiltInZoomControls(true);
    map.setMultiTouchControls(true);

    IMapController mapController = map.getController();
    mapController.setZoom(14);
    GeoPoint startPoint = new GeoPoint(19.7059504, -101.19498249999998);
    mapController.setCenter(startPoint);

    Toast.makeText(MapActivity3.this, "Long press to add a marker", Toast.LENGTH_LONG).show();

    overlayItemArray = new ArrayList<>();

}

@Override
public boolean singleTapConfirmedHelper(GeoPoint geoPoint) {
    Toast.makeText(this, "Tapped", Toast.LENGTH_SHORT).show();
    return true;
}

@Override
public boolean longPressHelper(GeoPoint geoPoint) {
    Log.e("LongPress", "Inside");

    overlayItemArray.add(new OverlayItem("", "", geoPoint));
    ItemizedIconOverlay<OverlayItem> itemizedIconOverlay = new ItemizedIconOverlay<>(this, overlayItemArray, null);

    map.getOverlays().add(itemizedIconOverlay);

    Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
    String result;
    try {
        List<Address> addressList = geocoder.getFromLocation(
                geoPoint.getLatitude(), geoPoint.getLongitude(), 1);
        if (addressList != null && addressList.size() > 0) {
            Log.e("LongPress","1st if");
            Address address = addressList.get(0);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
                sb.append(address.getAddressLine(i)).append("\n");
            }
            sb.append(address.getLocality()).append("\n");
            sb.append(address.getCountryName());
            result = sb.toString();
                tv.setText(result);
        }
    } catch (IOException e) {
        Log.e("LngPrss, Geocoder", "Unable connect to Geocoder", e);
    }

    return true;

} }

Solution

  • What you have to do is to follow carefully the tutorial.

    You missed the step 1, about MapEventsOverlay.