I have a number of pages/fragments listed in my navigation drawer, the user is likely to switch between these frequently and I want them in the backstack so that they can na
When you want to reuse the fragment before it, just first hide all the fragments and show the desired fragment at a time. By doing this you can reuse your fragments without removing them and without reloading the fragments. But be sure before to implement it you have to add the fragment to backstack.
There is no API to do this, but becuse I was wondering the same thing last week,
I took it as an exercise an implemented it myself.
My method allows you to remove a Fragment
from anywhere in the backstack and this is achieved by using refrection to modify the internal variables that store the backstack information in FragmentManagerImpl and BackStackRecord.
There are few important variables:
mBackStack
- stores the BackStackRecord
s that hold the Fragment
info, the previous ones, animations, etcmActive
- all added Fragment
smAvailBackStackIndices
- stores the indices that can be used by the newly inserted records, i.e. indices of null
values in mActive
Tested with 150+ Fragment
s and couldn't notice any leaks, but only monitored the heap in DDMS
and did not perform any other memory analysis.
So because someting may be broken, explore the code, re-test it, see if anyone provides a better answer, and rethink if you really need to do this in your project.
I uploaded the code as a gist on GitHub, hope it helps.