IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Sauvegarder l'état d'un onglet avec les fragments


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut Sauvegarder l'état d'un onglet avec les fragments
    Bonjour,

    J'utilise un système d'onglet avec les fragments :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    mTabHost = (TabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup();
    mTabManager = new TabManager(this, mTabHost, R.id.realtabcontent);    mTabManager.addTab(mTabHost.newTabSpec("frag1").setIndicator(createTabView(mTabHost.getContext(), "Frag1")), Fragment1.class, null);   mTabManager.addTab(mTabHost.newTabSpec("frag2").setIndicator(createTabView(mTabHost.getContext(), "Frag2")), Fragment2.class, null);
    Les onglets sont gérés avec ma classe TabManager (voir plus bas).

    Mon problème lorsque je switche entre les Fragments, je n'arrive pas à sauvegarder leur état actuelle. J'ai essayé avec la méthode onSaveInstanceState() mais elle n'est jamais appelé (habituellement elle est appelé dans le onDestroy())

    Ma question
    Avez-vous une méthode ou des exemples pour sauvegarder l'état d'un Fragment, pour que lorsque je revienne dessus, il reste dans l'état où je l'avais quitté?


    Classe TabManager pour gérer le système d'onglets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    public class TabManager implements TabHost.OnTabChangeListener {
        private final FragmentActivity mActivity;
        private final TabHost mTabHost;
        private final int mContainerId;
        private final HashMap<String, TabManager.TabInfo> mTabs = new HashMap<String, TabManager.TabInfo>();
        TabManager.TabInfo mLastTab;
     
        static final class TabInfo {
            private final String tag;
            private final Class<?> clss;
            private final Bundle args;
            private Fragment fragment;
     
            TabInfo(String _tag, Class<?> _class, Bundle _args) {
                tag = _tag;
                clss = _class;
                args = _args;
            }
        }
     
        static class DummyTabFactory implements TabHost.TabContentFactory {
            private final Context mContext;
     
            public DummyTabFactory(Context context) {
                mContext = context;
            }
     
            public View createTabContent(String tag) {
                View v = new View(mContext);
                v.setMinimumWidth(0);
                v.setMinimumHeight(0);
                return v;
            }
        }
     
        public TabManager(FragmentActivity activity, TabHost tabHost, int containerId) {
            mActivity = activity;
            mTabHost = tabHost;
            mContainerId = containerId;
            mTabHost.setOnTabChangedListener(this);
        }
     
        public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) {
            tabSpec.setContent(new DummyTabFactory(mActivity));
            String tag = tabSpec.getTag();
     
            TabManager.TabInfo info = new TabInfo(tag, clss, args);
     
            // Check to see if we already have a fragment for this tab, probably
            // from a previously saved state.  If so, deactivate it, because our
            // initial state is that a tab isn't shown.
            info.fragment = mActivity.getSupportFragmentManager().findFragmentByTag(tag);
            if (info.fragment != null && !info.fragment.isDetached()) {
                FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
                ft.detach(info.fragment);
                ft.commit();
            }
     
            mTabs.put(tag, info);
            mTabHost.addTab(tabSpec);
        }
     
        public void onTabChanged(String tabId) {
            TabManager.TabInfo newTab = mTabs.get(tabId);
            if (mLastTab != newTab) {
                FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
                if (mLastTab != null) {
                    if (mLastTab.fragment != null) {
                        ft.detach(mLastTab.fragment);
                    }
                }
                if (newTab != null) {
                    if (newTab.fragment == null) {
                        newTab.fragment = Fragment.instantiate(mActivity,
                                newTab.clss.getName(), newTab.args);
                        ft.add(mContainerId, newTab.fragment, newTab.tag);
                    } else {
                        ft.attach(newTab.fragment);
                    }
                }
     
                mLastTab = newTab;
                ft.commit();
                mActivity.getSupportFragmentManager().executePendingTransactions();
            }
            if (listener != null) listener.onTabChanged(tabId);
        }
        private OnTabChangeListener listener;
     
        public void setOnTabChangedListener(OnTabChangeListener listener) {
            this.listener = listener;
        }
    }

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut
    C'est résolu avec la librairie ActionBarSherlock

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme d'import avec les fragments
    Par StripMat dans le forum Android
    Réponses: 4
    Dernier message: 21/04/2015, 13h51
  2. [Débutant] Sauvegarder l'image d'un picturebox avec les superpositions!
    Par iVarlix dans le forum Windows Forms
    Réponses: 12
    Dernier message: 14/04/2014, 15h37
  3. Réponses: 1
    Dernier message: 06/03/2014, 12h15
  4. Réponses: 4
    Dernier message: 10/06/2011, 13h52
  5. Soucis avec les Graphiques dans les états
    Par Chococrocq dans le forum IHM
    Réponses: 27
    Dernier message: 04/01/2006, 19h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo