Tengo un problema con ViewPager donde mi ListView está perdiendo su posición de desplazamiento.¿Fragmento no llama a Save InstanceState al deslizar ViewPager?
El estado de la ListView puede ser fácilmente almacenado y restaurado usando:
@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());
}
Sin embargo, el problema es que cuando los fragmentos están siendo pasáses onDestroyView()
es llamada pero nunca llama onSaveInstanceState (Bundle outState)
.
Girando la pantalla y tal restaura el estado ListView
bien pero deslizando No puedo encontrar la forma de restaurar la lista correctamente.
Mi propia solución temporal es simplemente escribir mis cosas a los SharedPreferences en OnPause(), y obtener de nuevo en OnCreateView (...) Sin embargo, esto te obliga a acceder a la actividad de vinculación para obtener las Preferencias Compartidas (getActivity(). GetSharedPreferences (...)), y también podrías necesitar eliminar explícitamente cosas no deseadas cuando la actividad se derribe (dependiendo de lo que estés almacenamiento, ofc). Espero que alguien tenga una mejor manera! :) –
Consulte la respuesta actualizada :) – Jona
"FragmentPagerAdapter separará cada fragmento al pasar por la lista, pero manténgalos en la memoria para que puedan volverse a unir simplemente cuando el usuario retroceda. Si tiene un número mayor de Fragmentos, el FragmentStatePagerAdapter vale la pena considerarlo ya que los eliminará, con la desventaja de que necesitan ser reconstruidos a medida que el usuario se los devuelve. Por lo tanto, si tiene menos fragmentos más complejos, FragmentPagerAdapter tiene sentido, pero considere FragmentStatePagerAdapter para conjuntos más grandes ". (Android Dev Blog) –