2013-01-18 14 views
5

Sono di fronte a perdite di memoria perché alcuni frammenti non vengono rimossi. Ho un'attività che popola la vista con Fragment F1. Questo frammento ha associato ViewPager e FragmentStatePagerAdapter. Adattatore si sente pager con un altro frammento F2. Il problema inizia quando in Attività togli il frammento F1. I frammenti esistenti F2 non vengono rimossi.FragmentStatePagerAdapter non rimuove i frammenti se si rimuove il frammento del genitore

qualche suggerimento?

risposta

0

Ho lo stesso identico problema. Prova a spostare il frammento F1 in un'attività. Questo potrebbe aiutarti a determinare se il problema è avere un frammento in un frammento. Android non mi piace molto. Se trovo qualcosa dalla mia parte, io vi farò sapere

2

Non so se è lo stesso problema, ma qualche tempo fa ho avuto un problema con viewpager in cui i metodi del ciclo di vita dei frammenti non sono mai stati chiamati e il problema era con il gestore di frammenti.

Quindi, quando si crea l'adattatore, provare a passare childFragmentManager invece di supportFragmentManager e vedere se risolve il problema.

0

Mi trovavo di fronte allo stesso problema qui. Dopo aver studiato a lungo su come correggerlo in un modo "giusto", non riuscivo a farlo funzionare. Quindi sono stato costretto a rilasciare esplicitamente tutti i frammenti F2 s prima di rimuovere il frammento padre F1 (con una transazione frammento) dalla mia attività.

// Remove all content from the FragmentStatePagerAdapter instance. 
myAdapter.Content.Clear(); // Content here may be an ArrayList in Java or a List in C#. 
myAdapter.NotifyDataSetChanged(); 

// Reset current empty adapter inside the ViewPager (this will make all existing F2 fragments to be released). 
myViewPager.Adapter = myAdapter; 

// Do the transaction removing the parent F1 fragment from the main Activity. 
FragmentManager.BeginTransaction()... 

Seguendo questa procedura, tutti F2 frammenti iniziate essere rilasciato memoria forma e stanno anche avendo loro OnPause, OnDestroyView ... OnDestroy callback invocata pure.

Problemi correlati