Sto usando ViewPager
e FragmentStatePagerAdapter
per mostrare il frammento. Inizialmente ci sono 2 frammenti aggiunti Fragment1 e Fragment2 e 3rd framment Fragment3 viene aggiunto in 2a posizione dopo aver ricevuto la risposta dal server. Quindi, dopo aver aggiunto tutte le pagine, questa dovrebbe essere la sequenza di Frammenti in ViewPager -> Fragment1, Fragment3, Fragment2.ViewPager che ripete i vecchi frammenti sulla rotazione dello schermo
Il problema è dopo Fragment1 e Fragment3 vengono aggiunti e l'app sta effettuando una chiamata al server prima di aggiungere 3 ° frammento in 2 posizione se eseguo più volte la rotazione dello schermo e dopo aver aggiunto il terzo frammento mostra ancora la vecchia copia di Fragment2 che era al 2 ° posizione inizialmente in seconda posizione e terza posizione con nuova copia di Fragment2. Così Framment3 si presenta in ViewPager. Sequenza dopo l'aggiunta del terzo frammento -> Fragment1, vecchia copia di Fragment2, New Fragment2.
Sto ignorando onSaveInstanceState
e chiamando super.onSaveInstanceState
nella mia attività.
Inoltre, ho provato a restituire POSITION_NONE
da getItemPosition
. Ho letto da qualche parte che ViewPager salva copie di frammenti. Inoltre, eseguendo il debug, ho verificato che ViewPager contenesse 2 copie di Fragment2 quando il problema è stato riprodotto, anche se getItem
di FragmentStatePagerAdapter
ha restituito diversi frammenti per ciascuna posizione, ma ancora in seconda posizione mostrava il vecchio frammento. A scopo di test in getItem
ho restituito Fragment1 per tutte le posizioni in modo che tutte e 3 le pagine dovessero essere uguali ma anche dopo che nella seconda posizione mostrava la vecchia copia di Fragment2 quando riproducevo il problema con i passaggi sopra menzionati.
Quindi, come cancellare ViewPager
in modo che non salvi i vecchi frammenti. Come aggiornare ViewPager in modo che non conservi la vecchia copia con i frammenti. Penso che il problema sia con onSaveInstanceState ma ne ho bisogno. Come posso escludere ViewPager
quando le viste vengono salvate in onSaveInstanceState
. Ho provato mViewPager.setSaveEnabled(false)
ma ci vuole troppa memoria.
Ho trovato che il problema è il metodo instantiateItem
della scheda non chiama getItem a causa del quale viene restituito il vecchio frammento.
Qui di seguito è il codice soluzione
Codice:
@Override
public Object instantiateItem(ViewGroup container, int position) {
Object obj = super.instantiateItem(container, position);
Fragment fragment = mFragments.get(position);
if((obj!=null && fragment!=null) && !(obj.getClass().getSimpleName().equals(fragment.clss.getSimpleName()))){
destroyItem(container, position, obj);
return super.instantiateItem(container, position);
}else{
return obj;
}
}
Hai controllato [questo?] (Http://stackoverflow.com/a/9646622/1396082) –
Hai rimosso il tuo commento ... Ha funzionato per te ora? –
Il problema è il metodo instantiateItem della scheda non chiama getItem a causa della quale viene restituito il vecchio frammento. Sto trovando un modo per farlo chiamare getItem. – anujprashar