diff options
author | Tobrun <tobrun@mapbox.com> | 2017-12-19 06:39:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-19 06:39:40 +0100 |
commit | d80e71bf38f752a153dbd47944051151bf1d9772 (patch) | |
tree | 498fcba737dd722f2f8fec16d67dd5386f23fa86 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java | |
parent | f2b42af339ee63e47853c952e85dc0746902347c (diff) | |
download | qtlocation-mapboxgl-d80e71bf38f752a153dbd47944051151bf1d9772.tar.gz |
[android] - remove startup flash from fragment, rework OnMapReady callback for multiple listeners (#10717)
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java index 01c6da4971..0c11a4220e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java @@ -11,6 +11,9 @@ import android.view.ViewGroup; import com.mapbox.mapboxsdk.utils.MapFragmentUtils; +import java.util.ArrayList; +import java.util.List; + /** * Fragment wrapper around a map view. * <p> @@ -25,10 +28,11 @@ import com.mapbox.mapboxsdk.utils.MapFragmentUtils; * * @see #getMapAsync(OnMapReadyCallback) */ -public final class MapFragment extends Fragment { +public final class MapFragment extends Fragment implements OnMapReadyCallback { + private final List<OnMapReadyCallback> mapReadyCallbackList = new ArrayList<>(); + private MapboxMap mapboxMap; private MapView map; - private OnMapReadyCallback onMapReadyCallback; /** * Creates a default MapFragment instance @@ -63,7 +67,9 @@ public final class MapFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); Context context = inflater.getContext(); - return map = new MapView(context, MapFragmentUtils.resolveArgs(context, getArguments())); + map = new MapView(context, MapFragmentUtils.resolveArgs(context, getArguments())); + map.setVisibility(View.INVISIBLE); + return map; } /** @@ -76,9 +82,16 @@ public final class MapFragment extends Fragment { public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); map.onCreate(savedInstanceState); - if (onMapReadyCallback != null) { - map.getMapAsync(onMapReadyCallback); + map.getMapAsync(this); + } + + @Override + public void onMapReady(MapboxMap mapboxMap) { + this.mapboxMap = mapboxMap; + for (OnMapReadyCallback onMapReadyCallback : mapReadyCallbackList) { + onMapReadyCallback.onMapReady(mapboxMap); } + map.setVisibility(View.VISIBLE); } /** @@ -144,6 +157,7 @@ public final class MapFragment extends Fragment { public void onDestroyView() { super.onDestroyView(); map.onDestroy(); + mapReadyCallbackList.clear(); } /** @@ -152,10 +166,10 @@ public final class MapFragment extends Fragment { * @param onMapReadyCallback The callback to be invoked. */ public void getMapAsync(@NonNull final OnMapReadyCallback onMapReadyCallback) { - if (map == null) { - this.onMapReadyCallback = onMapReadyCallback; + if (mapboxMap == null) { + mapReadyCallbackList.add(onMapReadyCallback); } else { - map.getMapAsync(onMapReadyCallback); + onMapReadyCallback.onMapReady(mapboxMap); } } } |