L'emplacement de restauration fragment de l'etat qui est à l'intérieur de ViewPager
Version Courte:
J'ai une Activité qui a un ViewPager. Le ViewPager a trois fragments à l'intérieur. Je suis de stocker les données à l'intérieur de l'fragments par la mise en œuvre de Parcelable et de les stocker à l'intérieur de la botte.
Maintenant, la question est où puis-je restaurer les données. Je suis confus parce que (d'après ce que je sais) le ViewPager est la création d'une nouvelle instance du fragment à chaque fois que je tourne l'écran. (Une nouvelle activité est créée -> nouveau ViewPager -> nouveau Fragment). S'il vous plaît ne me corriger si je me trompe.
Version longue:
Mon ViewPager à l'intérieur de MainActivity
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new ForecastFragmentPageAdapter(getSupportFragmentManager(),
ForecastActivity.this));
viewPager.setOffscreenPageLimit(2);
Mon FragmentPagerAdapter
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new NowForecastFragment();
} else if (position == 1) {
return new HourlyForecastFragment();
} else {
return new DailyForecastFragment();
}
}
Enregistrement de l'état dans l'un de mes fragments
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//save data source
if (nowDataList != null) {
outState.putParcelableArrayList("savedNowDataList", nowDataList);
}
}
Merci d'avance!
Mise à JOUR:
Selon d'autres solutions postées à des problèmes similaires, j'ai aussi ajouté setRetainInstance(true); dans le onCreateView de mon fragment. Et c'est ainsi que je suis la sauvegarde et la restauration de l'état:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//save data source
if (nowDataList != null) {
Log.v("---------------->","saved!");
outState.putParcelableArrayList("savedNowDataList", nowDataList);
}
}
et de la restauration onCreateView
if(savedInstanceState!=null) {
Log.v("---------------->","restored!");
nowDataList = savedInstanceState.getParcelableArrayList("savedNowDataList");
nowForecastAdapter.notifyDataSetChanged();
}
Je vois les journaux a été déclenché. Pourquoi les données ne sont pas restaurés?
Bien que la solution effacé beaucoup de choses pour moi, je ne suis pas l'initialisation de mes fragments de l'activité. Mon FragmentPageAdapter fait ça. Donc, je ne suis pas sûr de savoir comment puis-je sauvegarder et restaurer mes fragments dans mon activité.
Salut mon Pote, il suffit de définir configchanges = screensize dans le fichier manifeste et il ne sera pas recharger les fragments et l'état actuel sera conservé. Espérons que cela aide 🙂
OriginalL'auteur GauravPandey | 2015-06-23
Vous devez vous connecter pour publier un commentaire.
Lorsque le
ViewPager
enregistre son état, il appellesaveState()
sur sa carte. De même, lorsque laViewPager
va restaurer son état, il appellerestoreState
sur la carte.Vous pourriez mettre en œuvre ces méthodes, mais qui a déjà été fait. Simplement étendre
FragmentStatePagerAdapter
au lieu deFragmentPagerAdapter
et vous obtenez ces implémentations de méthodes pour gratuit.Si vous étendez
FragmentStatePagerAdapter
puis de mettre en œuvreonSaveInstanceState()
et restaurer l'état dansonCreateView()
pour votreFragment
classes, tout devrait fonctionner comme prévu.Cela a aidé beaucoup dans une situation similaire. Il faut l'accepté de répondre.
La restauration se fait automatiquement mais qu'en vue de radiomessagerie dans un fragment, je veux obtenir l'ancienne référence de la carte, tel qu'il est géré automatiquement.
Les docs pour
FragmentStatePagerAdapter
avoir un ensemble de travail exemple: developer.android.com/reference/android/support/v4/app/...Mais il n'a pas d'exemple de la sauvegarde et de la restauration de l'état
OriginalL'auteur kris larson
Donc j'ai trouvé où était le problème. Juste de poster la réponse ici. Ainsi, lorsque l'écran est tourné, bien que je mets à jour la source de données, je n'ai pas remis en place la listview avec la mise à jour de l'adaptateur. Donc, je viens de faire ça et ça fonctionne.
Viens de poster la réponse si quelqu'un fait la même erreur et je me demandais ce qui n'allait pas.
ici, la question est de savoir comment vous restaurer le fragment de vue pager ? Si vous créez une nouvelle instance de fragment lorsque l'activité est recréé, vous disposez de deux instances de fragment, on est nouvellement créé fragment et la deuxième était ancien, qui est rétabli un.
OriginalL'auteur GauravPandey