Sto riscontrando un problema con ViewPager in cui il mio ListView sta perdendo la sua posizione di scorrimento.Frammento non chiama onSaveInstanceState quando si scorre ViewPager?
Lo stato del ListView può essere facilmente memorizzato e ripristinato utilizzando:
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.frag_cool_things, container, false);
AdvListView listView = (AdvListView) v.findViewById(R.id.lv0);
listView.setOnItemClickListener(mOnListItemClicked);
if (null != savedInstanceState)
{
listView.onRestoreListViewInstanceState(savedInstanceState.getParcelable("list_state"));
}
mListView = listView;
return v;
}
@Override
public void onSaveInstanceState (Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putParcelable("list_state", mListView.onSaveListViewInstanceState());
}
Tuttavia, il problema è che quando i frammenti sono fregato onDestroyView()
viene chiamato, ma non chiama mai onSaveInstanceState (Bundle outState)
.
Ruotando lo schermo e ripristini tali lo stato ListView
bene, ma scorrendo non riesco a capire come ripristinare l'elenco correttamente.
La mia soluzione temporanea è di solo scrivere la mia roba per i SharedPreferences in OnPause(), e farli tornare a OnCreateView (...). Questo, tuttavia, ti costringe ad accedere all'attività di collegamento per ottenere le SharedPreferences (getActivity(). GetSharedPreferences (...)), e potresti anche dover eliminare esplicitamente cose indesiderate quando l'attività viene abbattuta (a seconda di cosa sei memorizzazione, ofc). Spero che qualcuno abbia un modo migliore! :) –
Si prega di consultare la risposta aggiornata :) – Jona
"FragmentPagerAdapter rimuoverà ogni frammento mentre si scorre l'elenco, ma tenerli in memoria in modo che possano essere semplicemente ricollegati quando l'utente fa scorrere indietro. Se si dispone di un numero maggiore di frammenti, il FragmentStatePagerAdapter merita di essere preso in considerazione in quanto rimuoverli, con lo svantaggio di dover essere ricostruiti man mano che l'utente li rimuove. Quindi, se hai frammenti meno complessi, FragmentPagerAdapter ha senso, ma considera FragmentStatePagerAdapter per set più grandi. " (Android Dev Blog) –