diff options
author | Tobrun <tobrun@mapbox.com> | 2016-05-09 10:03:45 +0200 |
---|---|---|
committer | Tobrun <tobrun@mapbox.com> | 2016-05-20 12:00:02 +0200 |
commit | 69ae499a88a37b7ad21e53de8929930f8c22e0e3 (patch) | |
tree | ff2b9d5ba16af63f1b586588cf91ff32ab928ef9 | |
parent | d8dfc921b4d9c9f15bdd33c45ef7d2d77e04ba1b (diff) | |
download | qtlocation-mapboxgl-69ae499a88a37b7ad21e53de8929930f8c22e0e3.tar.gz |
[android] #3276 - View Marker click listener integration
2 files changed, 44 insertions, 5 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index 36a9c995c7..a017475cfd 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -71,6 +71,7 @@ public class MapboxMap { private MapboxMap.InfoWindowAdapter mInfoWindowAdapter; private MapboxMap.MarkerViewAdapter mMarkerViewAdapter; + private OnMarkerViewClickListener mOnMarkerViewClickListener; private boolean mMyLocationEnabled; private boolean mAllowConcurrentMultipleInfoWindows; @@ -648,12 +649,23 @@ public class MapboxMap { } List<Marker> inBoundsMarkers = result.getInBounds(); - for (Marker marker : inBoundsMarkers) { + for (final Marker marker : inBoundsMarkers) { convertView = viewSimplePool.acquire(); View adaptedView = mMarkerViewAdapter.getView(marker, convertView, mMapView); - mMarkerViews.append(marker.getId(), adaptedView); - if (convertView == null) { - mMapView.addView(adaptedView); + if(adaptedView!=null) { + adaptedView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(mOnMarkerViewClickListener!=null){ + mOnMarkerViewClickListener.onMarkerClick(marker, v); + } + } + }); + + mMarkerViews.append(marker.getId(), adaptedView); + if (convertView == null) { + mMapView.addView(adaptedView); + } } } } @@ -1185,6 +1197,14 @@ public class MapboxMap { return mMarkerViewAdapter; } + public void setOnMarkerViewClickListener(@Nullable OnMarkerViewClickListener listener){ + mOnMarkerViewClickListener = listener; + } + + public OnMarkerViewClickListener getOnMarkerViewClickListener() { + return mOnMarkerViewClickListener; + } + // // InfoWindow // @@ -1779,6 +1799,11 @@ public class MapboxMap { View getView(@NonNull U marker, @Nullable View convertView, @NonNull ViewGroup parent); } + public interface OnMarkerViewClickListener{ + + void onMarkerClick(@NonNull Marker marker, @NonNull View view); + } + /** * Interface definition for a callback to be invoked when the the My Location view changes location. * diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/ViewMarkerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/ViewMarkerActivity.java index 7467d2993d..de4aa81a60 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/ViewMarkerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/ViewMarkerActivity.java @@ -7,14 +7,18 @@ import android.support.annotation.Nullable; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions; +import com.mapbox.mapboxsdk.annotations.Marker; +import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; @@ -50,7 +54,9 @@ public class ViewMarkerActivity extends AppCompatActivity implements OnMapReadyC } @Override - public void onMapReady(MapboxMap mapboxMap) { + public void onMapReady(final MapboxMap mapboxMap) { + + // Add country markers List<BaseMarkerOptions> countries = new ArrayList<>(); countries.add(new CountryMarkerOptions().title("China").abbrevName("ch").flagRes(R.drawable.ic_china).position(new LatLng(31.230416, 121.473701))); countries.add(new CountryMarkerOptions().title("United States").abbrevName("us").flagRes(R.drawable.ic_us).position(new LatLng(38.907192, -77.036871))); @@ -58,9 +64,17 @@ public class ViewMarkerActivity extends AppCompatActivity implements OnMapReadyC countries.add(new CountryMarkerOptions().title("Germany").abbrevName("de").flagRes(R.drawable.ic_germany).position(new LatLng(52.520007, 13.404954))); mapboxMap.addMarkers(countries); + // Add view marker adapter mapboxMap.setMarkerViewAdapter(new CountryAdapter(this)); + mapboxMap.setOnMarkerViewClickListener(new MapboxMap.OnMarkerViewClickListener() { + @Override + public void onMarkerClick(@NonNull Marker marker, @NonNull View view) { + Log.d(MapboxConstants.TAG, "Country clicked " + ((CountryMarker) marker).getAbbrevName()); + } + }); } + private static class CountryAdapter implements MapboxMap.MarkerViewAdapter<CountryMarker> { private LayoutInflater inflater; |