Anomalia durante la modifica manuale del savedInstanceState di un ViewPager Fragment
Salve a tutti, ho aperto una discussione su stackoverflow ma non ho ricevuto risposta.
Incollo qui la mia domanda che ho fatto lì.
Se ci sono problemi con il fatto che il seguente testo è in inglese vi prego di farmelo sapere, lo traduco senza alcun problema!
I have a ViewPager (instantiated with FragmentStatePagerAdapter) with some Fragment attached to it.
In a specific usecase I need to reset instanceBean and UI for most of the fragments in the pager.
After some googling I have tried some solutions like this but the side effects were not easy manageable. Other solution like this doesn't match my needs.
So I decided to go straight with the manual reset of the UI and instanceBean obj like in the code below:
The code
Single fragment reset
This is done with the following code from the parent Activity:
Fragment reset from parent
AfterViews method:
OnSavedInstanceState
----------
Why do I set every page before resetting them?
Because like explained here:
Quote:
When pages are not visible to the user, their entire fragment may be destroyed, only keeping the saved state of that fragment.
and because until I don't select the relative fragment the @AfterViews method (that is everything processed right after OnCreateView of the fragment) is not executed.
This throws NullPointerException for a thousand of reason (Usually in the @AfterViews method You launch RestoreState method, initializes adapter, do UI stuff).
Setting the relative page before the reset let @AfterViews method be processed.
----------
Before checking what would happened when rotating the device, all the fragment I need are correcly reset.
When rotating the device, the error comes out:
The views (mainly EditText) go back to their previous state BEFORE my reset.
What happens?
When switching between the page, at a certain point the page will be destroyed and OnSavedInstanceState is called everytime for each page.
I have already handled the OnSavedInstanceState (like above) that when the boolean is false saves the state like if it had just been created.
I found that until within AfterView method the EditText has its text set to blank (like I want) but going on with the debug the EditText goes back to its previous state, so at the end it will show the last text it had.
Question
How can I keep the manually set (in OnSavedInstanceState) EditText text after destroying/recreating a fragment?