mapbox / mapbox-maps-android

Interactive, thoroughly customizable maps in native Android powered by vector tiles and OpenGL.
https://www.mapbox.com/mobile-maps-sdk
Other
448 stars 126 forks source link

Custom MapView does not support onRestoreInstanceState #2279

Open Copatych opened 4 months ago

Copatych commented 4 months ago

Environment

Also tested on emulator with api 33

Observed behavior and steps to reproduce

We get this stacktrace:

java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to com.example.mapboxbugs.CustomMapView$SavedState
at com.example.mapboxbugs.CustomMapView.onRestoreInstanceState(CustomMapView.kt:29)
at android.view.View.dispatchRestoreInstanceState(View.java:21559)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:4001)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:4007)
at android.view.View.restoreHierarchyState(View.java:21537)
at androidx.fragment.app.Fragment.restoreViewState(Fragment.java:698)
at androidx.fragment.app.Fragment.restoreViewState(Fragment.java:3176)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:3161)
at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:619)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:275)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1934)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:565)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

example code https://github.com/Copatych/MapboxBugs/tree/customMapView_onRestoreInstanceState

Expected behavior

Custom MapView supports restoring InstanceState.

Notes / preliminary analysis

Additional links and references

example code https://github.com/Copatych/MapboxBugs/tree/customMapView_onRestoreInstanceState

Copatych commented 4 months ago

This code worked with mapbox version 9