mapbox / mapbox/mapbox-maps-android
Custom MapView does not support onRestoreInstanceState
Nessuno ha ancora preso questa issue.
- Lingua principale
- Kotlin
- Stelle
- 578
- Fork
- 161
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Environment
- Android OS version: 11
- Devices affected: Samsung Galaxy A50
- Maps SDK Version: 11.1.0
Also tested on emulator with api 33
Observed behavior and steps to reproduce
- Create custom MapView.
- Override onSaveInstanceState and onRestoreInstanceState.
- Create navigation from fragment with custom MapView to another fragment.
- Navigate to another fragment and return to fragment with MapView.
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con l’implementazione personalizzata di MapView nell’esempio MapboxBugs collegato, in particolare con CustomMapView.kt e i relativi metodi onSaveInstanceState/onRestoreInstanceState, quindi riproduci il flusso di navigazione tra fragment su Android. Confronta lo stato ripristinato ricevuto dalla view personalizzata con il tipo SavedState previsto; il lavoro è concluso quando tornando al fragment non viene più generata la ClassCastException segnalata e lo stato dell’istanza viene ripristinato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- kotlin
- Ambito
- mobile
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100