Onde restaurar o estado do fragmento que está dentro do ViewPager
Versão curta:
Eu tenho uma atividade que tem um ViewPager. O ViewPager possui três fragmentos. Estou armazenando os dados dentro dos fragmentos implementando o Parcelable e armazenando-os dentro do pacote.
Agora, a questão é onde restauro os dados. Estou confuso porque (pelo que sei) o ViewPager está criando uma nova instância do fragmento cada vez que giro a tela. (Uma nova atividade é criada -> novo ViewPager -> novo fragmento). Por favor, corrija-me se estiver errado.
Versão longa:
My ViewPager dentro de MainActivity
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new ForecastFragmentPageAdapter(getSupportFragmentManager(),
ForecastActivity.this));
viewPager.setOffscreenPageLimit(2);
My FragmentPagerAdapter
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new NowForecastFragment();
} else if (position == 1) {
return new HourlyForecastFragment();
} else {
return new DailyForecastFragment();
}
}
Salvando estado em um dos meus fragmentos
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save data source
if (nowDataList != null) {
outState.putParcelableArrayList("savedNowDataList", nowDataList);
}
}
Desde já, obrigado!
ATUALIZAR:
De acordo com outras soluções postadas para problemas semelhantes, também adicioneisetRetainInstance (true); no onCreateView do meu fragmento. E é assim que estou salvando e restaurando o estado:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save data source
if (nowDataList != null) {
Log.v("---------------->","saved!");
outState.putParcelableArrayList("savedNowDataList", nowDataList);
}
}
e restaurando no onCreateView
if(savedInstanceState!=null) {
Log.v("---------------->","restored!");
nowDataList = savedInstanceState.getParcelableArrayList("savedNowDataList");
nowForecastAdapter.notifyDataSetChanged();
}
Eu vejo os dois logs sendo acionados. Por que os dados não estão sendo restaurados?