/** * Locate an existing instance of this Fragment or if not found, create and * add it using FragmentManager. * * @param fm The FragmentManager manager to use. * @return The existing instance of the Fragment or the new instance if just * created. */ public static RetainFragment findOrCreateRetainFragment(FragmentManager fm) { // Check to see if we have retained the worker fragment. RetainFragment mRetainFragment = (RetainFragment) fm.findFragmentByTag(TAG); // If not retained (or first time running), we need to create and add it. if (mRetainFragment == null) { mRetainFragment = new RetainFragment(); fm.beginTransaction().add(mRetainFragment, TAG).commitAllowingStateLoss(); } return mRetainFragment; }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Make sure this Fragment is retained over a configuration change setRetainInstance(true); }
/** * Find and return an existing ImageCache stored in a {@link ImageCache.RetainFragment}, if not found a new * one is created using the supplied params and saved to a {@link ImageCache.RetainFragment}. * * @param fragmentManager The fragment manager to use when dealing with the retained fragment. * @param memCacheSizePercent The cache size as a percent of available app memory. * @return An existing retained ImageCache object or a new one if one did not exist */ public static ImageCache getInstance( FragmentManager fragmentManager, float memCacheSizePercent) { // Search for, or create an instance of the non-UI RetainFragment final RetainFragment mRetainFragment = findOrCreateRetainFragment(fragmentManager); // See if we already have an ImageCache stored in RetainFragment ImageCache imageCache = (ImageCache) mRetainFragment.getObject(); // No existing ImageCache, create one and store it in RetainFragment if (imageCache == null) { imageCache = new ImageCache(memCacheSizePercent); mRetainFragment.setObject(imageCache); } return imageCache; }