2017-10-10 8 views
0

J'ai trois fragments (A, B, C) dans une activité. Le fragment A conduit à B et le fragment B à C. Dans le fragment C, l'utilisateur dispose de deux options. Il pourrait soit retourner au fragment A, soit détruire toute l'activité. S'il choisit de revenir au fragment A, je souhaite que l'ensemble de données actuel soit sauvegardé dans une liste du fragment C, puis le même cycle est répété. Cependant quand il atteint le fragment C la prochaine fois je veux que les données actuelles soient ajoutées à cette liste.Comment enregistrer des données dans des opérations de fragment cyclique?

Comment puis-je implémenter ceci en utilisant onPause() et onResume()? S'il y a une meilleure façon de le faire, veuillez me le faire savoir. Je ne peux pas stocker dans les préférences partagées car les données seront une ArrayList d'un objet.

Je serais reconnaissant si quelqu'un peut me montrer une structure de base de la façon dont nous pourrions implémenter cela dans un code.

+0

Vous pouvez enregistrer vos données sur une préférence partagée. –

+0

https://stackoverflow.com/questions/23024831/android-shared-preferences-example –

+0

Je ne recommanderais pas d'utiliser les préférences partagées car leur but est de conserver les données lorsque l'application est supprimée, pas de transmettre des données entre activités/fragments. Il y a d'autres méthodes pour cela. – Eselfar

Répondre

0

Option 1

Vous devez mettre en œuvre une communication entre le fragment et l'activité. L'activité conserve l'objet avec toutes les informations et le fragment récupère l'objet lors de la reprise et le met à jour si nécessaire.

Voici un exemple de the official documentation

public class HeadlinesFragment extends ListFragment { 
    OnHeadlineSelectedListener mCallback; 

    // Container Activity must implement this interface 
    public interface OnHeadlineSelectedListener { 
     public void onArticleSelected(int position); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mCallback = (OnHeadlineSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnHeadlineSelectedListener"); 
     } 
    } 

    ... 
} 

Puis onResume() l'appel Fragment mCallback.getObject() pour obtenir les informations. Et puis mettez à jour l'objet.

Option 2

L'autre option est de créer une classe de gestionnaire externe qui gardera les données seront un accessible par tous les fragments. Il peut s'agir d'un singleton, mais il doit être détruit lorsque l'activité est détruite.