summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorTobrun <tobrun@mapbox.com>2016-05-13 12:27:37 +0200
committerTobrun <tobrun@mapbox.com>2016-05-20 12:03:26 +0200
commite50fb87e7bfaef07362feb84d661f003b352f354 (patch)
tree2325cecafb25b02167dc04f41c05c0028488c243 /platform
parentfeb5832ee9f19405b7cbcbc65be707a7d41575b7 (diff)
downloadqtlocation-mapboxgl-e50fb87e7bfaef07362feb84d661f003b352f354.tar.gz
[android] #3276 - allowing multiple ViewAdapter implementations
Diffstat (limited to 'platform')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java2
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java160
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml8
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java9
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MultipleViewMarkerAdapterActivity.java203
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/ViewMarkerActivity.java22
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml2
7 files changed, 335 insertions, 71 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
index 479db4c010..c8a5edbb8c 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
@@ -457,7 +457,7 @@ public class MapView extends FrameLayout {
}
}
} else if (change == REGION_IS_CHANGING || change == REGION_DID_CHANGE) {
- if (mMapboxMap.getMarkerViewAdapter() != null) {
+ if (mMapboxMap.getMarkerViewAdapters() != null) {
invalidateViewMarkers();
}
}
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 1fa049c2a3..2ab00811d5 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
@@ -4,6 +4,7 @@ import android.content.Context;
import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.AnimatorListenerAdapter;
+import android.content.Context;
import android.graphics.Bitmap;
import android.location.Location;
import android.os.SystemClock;
@@ -46,6 +47,7 @@ import com.mapbox.mapboxsdk.layers.CustomLayer;
import com.mapbox.mapboxsdk.location.LocationListener;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationViewSettings;
+import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -77,7 +79,6 @@ public class MapboxMap {
private List<InfoWindow> mInfoWindows;
private MapboxMap.InfoWindowAdapter mInfoWindowAdapter;
- private MapboxMap.MarkerViewAdapter mMarkerViewAdapter;
private OnMarkerViewClickListener mOnMarkerViewClickListener;
private int mMarkerViewItemAnimatorInRes;
private int mMarkerViewItemAnimatorOutRes;
@@ -102,7 +103,8 @@ public class MapboxMap {
private double mMaxZoomLevel = -1;
private double mMinZoomLevel = -1;
- private Pools.SimplePool<View> viewSimplePool = new Pools.SimplePool<>(20);
+ private Pools.SimplePool<View> mViewReusePool = new Pools.SimplePool<>(20);
+ private List<MapboxMap.MarkerViewAdapter> mMarkerViewAdapters;
MapboxMap(@NonNull MapView mapView) {
mMapView = mapView;
@@ -112,6 +114,7 @@ public class MapboxMap {
mProjection = new Projection(mapView);
mAnnotations = new LongSparseArray<>();
mMarkerViews = new LongSparseArray<>();
+ mMarkerViewAdapters = new ArrayList<>();
mSelectedMarkers = new ArrayList<>();
mInfoWindows = new ArrayList<>();
}
@@ -667,60 +670,64 @@ public class MapboxMap {
// in bounds markers
List<Marker> inBoundsMarkers = result.getInBounds();
for (final Marker marker : inBoundsMarkers) {
- convertView = viewSimplePool.acquire();
+ convertView = mViewReusePool.acquire();
Log.v("TAG", "Calling get view for " + marker.getId());
- View adaptedView = mMarkerViewAdapter.getView(marker, convertView, mMapView);
- if (adaptedView != null) {
- // hack to hide old marker, todo replace with visibility
- Icon icon = marker.getIcon();
- if (!icon.getBitmap().equals(mViewMarkerBitmap)) {
- if (mViewMarkerBitmap == null) {
- Bitmap.Config conf = Bitmap.Config.ARGB_8888;
- mViewMarkerBitmap = Bitmap.createBitmap(icon.getBitmap().getWidth(), icon.getBitmap().getHeight(), conf);
- }
- marker.setIcon(IconFactory.recreate(icon.getId(), mViewMarkerBitmap));
- }
-
- if (mSelectedMarkers.contains(marker)) {
- if (mMarkerViewItemAnimatorInRes != 0) {
- Animator animator = AnimatorInflater.loadAnimator(mMapView.getContext(), mMarkerViewItemAnimatorInRes);
- animator.setDuration(0);
- animator.setTarget(convertView);
- animator.start();
- }
- }
-
- adaptedView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
- boolean clickHandled = false;
- if (mOnMarkerViewClickListener != null) {
- clickHandled = mOnMarkerViewClickListener.onMarkerClick(marker, v);
+ for (final MarkerViewAdapter adapter : mMarkerViewAdapters) {
+ if (adapter.getMarkerClass()==marker.getClass()) {
+ View adaptedView = adapter.getView(marker, convertView, mMapView);
+ if (adaptedView != null) {
+ // hack to hide old marker, todo replace with visibility
+ Icon icon = marker.getIcon();
+ if (!icon.getBitmap().equals(mViewMarkerBitmap)) {
+ if (mViewMarkerBitmap == null) {
+ Bitmap.Config conf = Bitmap.Config.ARGB_8888;
+ mViewMarkerBitmap = Bitmap.createBitmap(icon.getBitmap().getWidth(), icon.getBitmap().getHeight(), conf);
+ }
+ marker.setIcon(IconFactory.recreate(icon.getId(), mViewMarkerBitmap));
}
- if (!clickHandled) {
+ if (mSelectedMarkers.contains(marker)) {
if (mMarkerViewItemAnimatorInRes != 0) {
Animator animator = AnimatorInflater.loadAnimator(mMapView.getContext(), mMarkerViewItemAnimatorInRes);
- animator.setTarget(v);
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- super.onAnimationEnd(animation);
+ animator.setDuration(0);
+ animator.setTarget(convertView);
+ animator.start();
+ }
+ }
+
+ adaptedView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ boolean clickHandled = false;
+ if (mOnMarkerViewClickListener != null) {
+ clickHandled = mOnMarkerViewClickListener.onMarkerClick(marker, v, adapter);
+ }
+
+ if (!clickHandled) {
+ if (mMarkerViewItemAnimatorInRes != 0) {
+ Animator animator = AnimatorInflater.loadAnimator(mMapView.getContext(), mMarkerViewItemAnimatorInRes);
+ animator.setTarget(v);
+ animator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ selectMarker(marker);
+ }
+ });
+ animator.start();
+ } else {
selectMarker(marker);
}
- });
- animator.start();
- } else {
- selectMarker(marker);
+ }
}
+ });
+
+ mMarkerViews.append(marker.getId(), adaptedView);
+ if (convertView == null) {
+ mMapView.addView(adaptedView);
}
}
- });
-
- mMarkerViews.append(marker.getId(), adaptedView);
- if (convertView == null) {
- mMapView.addView(adaptedView);
}
}
}
@@ -935,7 +942,7 @@ public class MapboxMap {
long[] ids = mMapView.addPolygons(polygons);
- // if unit tests or polygons correcly added to map
+ // if unit tests or polygons correctly added to map
if (ids == null || ids.length == polygons.size()) {
long id = 0;
for (int i = 0; i < polygons.size(); i++) {
@@ -1030,7 +1037,7 @@ public class MapboxMap {
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
viewHolder.setVisibility(View.GONE);
- viewSimplePool.release(viewHolder);
+ mViewReusePool.release(viewHolder);
}
});
}
@@ -1281,15 +1288,15 @@ public class MapboxMap {
return marker;
}
- public void setMarkerViewAdapter(@Nullable MarkerViewAdapter markerViewAdapter) {
- mMarkerViewAdapter = markerViewAdapter;
- if (markerViewAdapter != null) {
+ public void addMarkerViewAdapter(@Nullable MarkerViewAdapter markerViewAdapter) {
+ if (!mMarkerViewAdapters.contains(markerViewAdapter)) {
+ mMarkerViewAdapters.add(markerViewAdapter);
mMapView.invalidateViewMarkers();
}
}
- public MarkerViewAdapter getMarkerViewAdapter() {
- return mMarkerViewAdapter;
+ public List<MarkerViewAdapter> getMarkerViewAdapters() {
+ return mMarkerViewAdapters;
}
public void setOnMarkerViewClickListener(@Nullable OnMarkerViewClickListener listener) {
@@ -1386,7 +1393,7 @@ public class MapboxMap {
/**
* Sets the distance from the edges of the map view’s frame to the edges of the map
* view’s logical viewport.
- * <p>
+ * <p/>
* When the value of this property is equal to {0,0,0,0}, viewport
* properties such as `centerCoordinate` assume a viewport that matches the map
* view’s frame. Otherwise, those properties are inset, excluding part of the
@@ -1903,15 +1910,54 @@ public class MapboxMap {
View getInfoWindow(@NonNull Marker marker);
}
- public interface MarkerViewAdapter<U extends Marker> {
+ public static abstract class MarkerViewAdapter<U extends Marker> {
+
+ private Class<U> persistentClass;
+
+ @SuppressWarnings("unchecked")
+ public MarkerViewAdapter(Context context) {
+ this.persistentClass = (Class<U>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
+ }
+
+ @AnimatorRes
+ private int animSelectOutRes;
+
+ @AnimatorRes
+ private int animSelectInRes;
+
+ @AnimatorRes
+ private int animEnterRes;
+
+ @AnimatorRes
+ private int animExitRes;
@Nullable
- View getView(@NonNull U marker, @Nullable View convertView, @NonNull ViewGroup parent);
+ public abstract View getView(@NonNull U marker, @Nullable View convertView, @NonNull ViewGroup parent);
+
+ public int getAnimSelectOutRes() {
+ return animSelectOutRes;
+ }
+
+ public int getAnimSelectInRes() {
+ return animSelectInRes;
+ }
+
+ public int getAnimEnterRes() {
+ return animEnterRes;
+ }
+
+ public int getAnimExitRes() {
+ return animExitRes;
+ }
+
+ public Class<U> getMarkerClass(){
+ return persistentClass;
+ }
}
public interface OnMarkerViewClickListener {
- boolean onMarkerClick(@NonNull Marker marker, @NonNull View view);
+ boolean onMarkerClick(@NonNull Marker marker, @NonNull View view, @NonNull MarkerViewAdapter adapter);
}
/**
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml
index d31915f217..214d80de69 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml
@@ -262,6 +262,14 @@
android:value="@string/category_annotation" />
</activity>
+ <activity
+ android:name=".activity.annotation.MultipleViewMarkerAdapterActivity"
+ android:description="@string/description_view_marker2"
+ android:label="@string/activity_view_marker2">
+ <meta-data
+ android:name="@string/category"
+ android:value="@string/category_annotation" />
+ </activity>
<!-- Configuration Settings -->
<meta-data
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java
index 559df05b30..17e8946b3c 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java
@@ -89,12 +89,12 @@ public class BulkMarkerActivity extends AppCompatActivity implements AdapterView
public void onClick(View v) {
if (mMapboxMap != null) {
fab.animate().alpha(0).start();
- mMapboxMap.setMarkerViewAdapter(new TextAdapter(BulkMarkerActivity.this));
+ mMapboxMap.addMarkerViewAdapter(new TextAdapter(BulkMarkerActivity.this));
mMapView.addOnMapChangedListener(new MapView.OnMapChangedListener() {
@Override
public void onMapChanged(@MapView.MapChange int change) {
if (change == MapView.REGION_IS_CHANGING || change == MapView.REGION_DID_CHANGE) {
- if (mMapboxMap.getMarkerViewAdapter() != null) {
+ if (!mMapboxMap.getMarkerViewAdapters().isEmpty()) {
viewCountView.setText("ViewCache size " + (mMapView.getChildCount()-5));
}
}
@@ -104,7 +104,7 @@ public class BulkMarkerActivity extends AppCompatActivity implements AdapterView
mMapboxMap.setMarkerViewItemAnimation(R.animator.scale_up, R.animator.scale_down);
mMapboxMap.setOnMarkerViewClickListener(new MapboxMap.OnMarkerViewClickListener() {
@Override
- public boolean onMarkerClick(@NonNull final Marker marker, @NonNull View view) {
+ public boolean onMarkerClick(@NonNull Marker marker, @NonNull View view, @NonNull MapboxMap.MarkerViewAdapter adapter) {
Toast.makeText(BulkMarkerActivity.this, "Hello "+marker.getId(), Toast.LENGTH_SHORT).show();
return false;
}
@@ -115,11 +115,12 @@ public class BulkMarkerActivity extends AppCompatActivity implements AdapterView
}
}
- public static class TextAdapter implements MapboxMap.MarkerViewAdapter<Marker> {
+ public static class TextAdapter extends MapboxMap.MarkerViewAdapter<Marker> {
private LayoutInflater inflater;
public TextAdapter(@NonNull Context context) {
+ super(context);
this.inflater = LayoutInflater.from(context);
}
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MultipleViewMarkerAdapterActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MultipleViewMarkerAdapterActivity.java
new file mode 100644
index 0000000000..91e54180eb
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MultipleViewMarkerAdapterActivity.java
@@ -0,0 +1,203 @@
+package com.mapbox.mapboxsdk.testapp.activity.annotation;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+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.Marker;
+import com.mapbox.mapboxsdk.annotations.MarkerOptions;
+import com.mapbox.mapboxsdk.geometry.LatLng;
+import com.mapbox.mapboxsdk.maps.MapView;
+import com.mapbox.mapboxsdk.maps.MapboxMap;
+import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
+import com.mapbox.mapboxsdk.testapp.R;
+import com.mapbox.mapboxsdk.testapp.model.annotations.CountryMarker;
+import com.mapbox.mapboxsdk.testapp.model.annotations.CountryMarkerOptions;
+
+public class MultipleViewMarkerAdapterActivity extends AppCompatActivity {
+
+ private MapboxMap mMapboxMap;
+ private MapView mMapView;
+
+ private final static LatLng[] LAT_LNGS = new LatLng[]{
+ new LatLng(38.907327, -77.041293),
+ new LatLng(38.909698, -77.029642),
+ new LatLng(38.907227, -77.036530),
+ new LatLng(38.905607, -77.031916),
+ new LatLng(38.897424, -77.036508),
+ new LatLng(38.897642, -77.041980),
+ new LatLng(38.889876, -77.008849),
+ new LatLng(38.889441, -77.050134),
+ new LatLng(38.902580, -77.050102)};
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_marker_bulk);
+
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+
+ final ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayShowTitleEnabled(false);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setDisplayShowHomeEnabled(true);
+ }
+
+ final TextView viewCountView = (TextView) findViewById(R.id.countView);
+ mMapView = (MapView) findViewById(R.id.mapView);
+ mMapView.setAccessToken(getString(R.string.mapbox_access_token));
+ mMapView.onCreate(savedInstanceState);
+ mMapView.getMapAsync(new OnMapReadyCallback() {
+ @Override
+ public void onMapReady(@NonNull MapboxMap mapboxMap) {
+ mMapboxMap = mapboxMap;
+
+ mMapboxMap.addMarker(new CountryMarkerOptions().title("United States").abbrevName("us").flagRes(R.drawable.ic_us).position(new LatLng(38.899774, -77.023237)));
+ mMapboxMap.addMarkerViewAdapter(new TextAdapter(MultipleViewMarkerAdapterActivity.this));
+ mMapboxMap.addMarkerViewAdapter(new CountryAdapter(MultipleViewMarkerAdapterActivity.this));
+
+ for (int i = 0; i < LAT_LNGS.length; i++) {
+ mMapboxMap.addMarker(new MarkerOptions().position(LAT_LNGS[i]).title(String.valueOf(i)));
+ }
+
+ mMapView.addOnMapChangedListener(new MapView.OnMapChangedListener() {
+ @Override
+ public void onMapChanged(@MapView.MapChange int change) {
+ if (change == MapView.REGION_IS_CHANGING || change == MapView.REGION_DID_CHANGE) {
+ if (!mMapboxMap.getMarkerViewAdapters().isEmpty()) {
+ viewCountView.setText("ViewCache size " + (mMapView.getChildCount() - 5));
+ }
+ }
+ }
+ });
+
+ mMapboxMap.setMarkerViewItemAnimation(R.animator.scale_up, R.animator.scale_down);
+ mMapboxMap.setOnMarkerViewClickListener(new MapboxMap.OnMarkerViewClickListener() {
+ @Override
+ public boolean onMarkerClick(@NonNull Marker marker, @NonNull View view, @NonNull MapboxMap.MarkerViewAdapter adapter) {
+ Toast.makeText(MultipleViewMarkerAdapterActivity.this, "Hello " + marker.getId(), Toast.LENGTH_SHORT).show();
+ return false;
+ }
+ });
+ }
+ });
+ }
+
+ private static class TextAdapter extends MapboxMap.MarkerViewAdapter<Marker> {
+
+ private LayoutInflater inflater;
+
+ public TextAdapter(@NonNull Context context) {
+ super(context);
+ this.inflater = LayoutInflater.from(context);
+ }
+
+ @Nullable
+ @Override
+ public View getView(@NonNull Marker marker, @Nullable View convertView, @NonNull ViewGroup parent) {
+ ViewHolder viewHolder;
+ if (convertView == null) {
+ viewHolder = new ViewHolder();
+ convertView = inflater.inflate(R.layout.view_text_marker, parent, false);
+ viewHolder.title = (TextView) convertView.findViewById(R.id.textView);
+ convertView.setTag(viewHolder);
+ } else {
+ viewHolder = (ViewHolder) convertView.getTag();
+ }
+ viewHolder.title.setText(marker.getTitle());
+ return convertView;
+ }
+
+ private static class ViewHolder {
+ TextView title;
+ }
+ }
+
+ private static class CountryAdapter extends MapboxMap.MarkerViewAdapter<CountryMarker> {
+
+ private LayoutInflater inflater;
+
+ public CountryAdapter(@NonNull Context context) {
+ super(context);
+ this.inflater = LayoutInflater.from(context);
+ }
+
+ @Nullable
+ @Override
+ public View getView(@NonNull CountryMarker marker, @Nullable View convertView, @NonNull ViewGroup parent) {
+ ViewHolder viewHolder;
+ if (convertView == null) {
+ viewHolder = new ViewHolder();
+ convertView = inflater.inflate(R.layout.view_custom_marker, parent, false);
+ viewHolder.flag = (ImageView) convertView.findViewById(R.id.imageView);
+ viewHolder.abbrev = (TextView) convertView.findViewById(R.id.textView);
+ convertView.setTag(viewHolder);
+ } else {
+ viewHolder = (ViewHolder) convertView.getTag();
+ }
+ viewHolder.flag.setImageResource(marker.getFlagRes());
+ viewHolder.abbrev.setText(marker.getAbbrevName());
+ return convertView;
+ }
+
+ private static class ViewHolder {
+ ImageView flag;
+ TextView abbrev;
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mMapView.onResume();
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ mMapView.onPause();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ mMapView.onSaveInstanceState(outState);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mMapView.onDestroy();
+ }
+
+ @Override
+ public void onLowMemory() {
+ super.onLowMemory();
+ mMapView.onLowMemory();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ onBackPressed();
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+}
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 651cfcebf1..f575755894 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
@@ -65,29 +65,33 @@ public class ViewMarkerActivity extends AppCompatActivity implements OnMapReadyC
final List<Marker> markers = mapboxMap.addMarkers(countries);
// Add view marker adapter
- mapboxMap.setMarkerViewAdapter(new CountryAdapter(this));
+ mapboxMap.addMarkerViewAdapter(new CountryAdapter(this));
mapboxMap.setOnMarkerViewClickListener(new MapboxMap.OnMarkerViewClickListener() {
@Override
- public boolean onMarkerClick(@NonNull Marker marker, @NonNull View view) {
+ public boolean onMarkerClick(@NonNull Marker marker, @NonNull View view, @NonNull MapboxMap.MarkerViewAdapter adapter) {
Log.d(MapboxConstants.TAG, "Country clicked " + ((CountryMarker) marker).getAbbrevName());
return true;
}
});
- findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mapboxMap.removeAnnotation(markers.get(2));
- }
- });
+ View view = findViewById(R.id.fab);
+ if(view!=null) {
+ view.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mapboxMap.removeAnnotation(markers.get(2));
+ }
+ });
+ }
}
- private static class CountryAdapter implements MapboxMap.MarkerViewAdapter<CountryMarker> {
+ private static class CountryAdapter extends MapboxMap.MarkerViewAdapter<CountryMarker> {
private LayoutInflater inflater;
public CountryAdapter(@NonNull Context context) {
+ super(context);
this.inflater = LayoutInflater.from(context);
}
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml
index a84035aa58..e9761f0cfd 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml
@@ -18,6 +18,7 @@
<string name="activity_polygon">Polygon</string>
<string name="activity_press_for_marker">Press Map For Marker</string>
<string name="activity_view_marker">View Marker API</string>
+ <string name="activity_view_marker2">View Marker AP2</string>
<!-- InfoWindow-->
<string name="activity_info_window">Standard InfoWindow example</string>
@@ -78,6 +79,7 @@
<string name="description_snapshot">Example to make a snapshot of the map</string>
<string name="description_doublemap">2 maps in a view hierarchy</string>
<string name="description_view_marker">Use an Android SDK View as marker</string>
+ <string name="description_view_marker2">Use an Android SDK View as marker2</string>
<string name="menuitem_title_concurrent_infowindow">Concurrent Open InfoWindows</string>r
<string name="menuitem_title_tracking_mode_dismiss_on_gesture">Dismiss location tracking on gesture</string>