J'ai donc appris que j'ai besoin d'un constructeur vide pour que mes fragments ne se plantent pas lors de la réinitialisation. Mon problème est que j'utilise des listes de données pour mes fragments lorsqu'ils sont initialisés (au moins certains d'entre eux). Donc, quelle serait une bonne façon de démarrer de nouveaux fragments avec une liste de données. Devrais-je dans le OnCreate()
faire un getData
qui obtient les données d'une autre source ou quelle serait l'approche appropriée ?
Nourrir le faisceau de données ne serait pas vraiment une bonne approche, car j'ai beaucoup de données.
Prenons donc un cas (je le comprends beaucoup mieux de cette façon).
Lorsqu'un utilisateur clique sur un bouton, le fragment est lancé. Ce que j'avais l'habitude de faire était de créer un nouveau fragment de cette façon :
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.center_container, new DetailFragment(item));
fragmentTransaction.addToBackStack(DETAIL_TAG);
fragmentTransaction.commit();
Puis dans mon fragment :
public DetailFragment(EventItem item) {
mItem = item;
mPlaces = Database.getContainerPlaces(getActivity()).getValidItems();
}
Je ne peux pas donner toutes les données à une liasse, donc ça ne marcherait pas. Alors, que dois-je faire ?
R : Dois-je initialiser le fragment avec le constructeur vide et ensuite, à partir de mon activité, utiliser les setters pour définir les données directement dans le fragment ? Cependant, ne vais-je pas manquer des données si l'utilisateur appuie sur home, Android ferme le fragment et l'utilisateur revient plus tard ?
B : Devrais-je initialiser le fragment avec le motif de la fabrique et appeler setRetainInstance(true)
Le fragment doit-il donner au fragment une clé pour identifier les données, puis laisser le fragment récupérer les données nécessaires dans onCreateView à partir d'une source tierce ?
C : Devrais-je simplement faire un constructeur vide et ensuite dans onCreate()
récupérer les données nécessaires pour le fragment ?
Il convient de noter que l'application est verrouillée en mode portrait et que le problème réside principalement dans le maintien des objets lorsque Android se ferme et que l'utilisateur redémarre.