2012-08-14 44 views
1

您好Android開發者, 我遵循Android Developers的顯示圖像指南,並且想要從RetainFragment加載我的初始化緩存,如果我旋轉我的設備。 A在我的ListFragmentsonActivityCreated()方法中執行此操作,但每次創建新片段並且不重複使用片段。在片段中加載RetainFragment

我做這樣的事情: RetainFragment

class RetainFragment extends Fragment { 
private static final String TAG = "RetainFragment"; 
public LruCache mRetainedCache; 

public RetainFragment() {} 

public static RetainFragment findOrCreateRetainFragment(FragmentManager fm) { 
    RetainFragment fragment = (RetainFragment) fm.findFragmentByTag(TAG); 
    if (fragment == null) { 
     fragment = new RetainFragment(); 
    } 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
} 

}

而且這樣的:ListFragment

@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 

    RetainFragment mRetainFragment = RetainFragment.findOrCreateRetainFragment(getFragmentManager()); 
    LruCache mMemoryCache = RetainFragment.mRetainedCache; 
    if (mMemoryCache == null) 
    { 
     mMemoryCache = new LruCache(cacheSize); 
     mRetainFragment.mRetainedCache = mMemoryCache; 
    } 
    else 
    { 
     mMemoryCache = mRetainFragment.mRetainedCache; 
    } 
    ... 
} 

回答

2

它看起來對我來說,他們忘了其實附上RetainFragment不知何故到ActivityFragmentManager有機會找到它。未連接的碎片無法在配置更改後存活。

不知道,但它應與下面除了

public static RetainFragment findOrCreateRetainFragment(FragmentManager fm) { 
    RetainFragment fragment = (RetainFragment) fm.findFragmentByTag(TAG); 
    if (fragment == null) { 
     fragment = new RetainFragment(); 
     // add this line 
     fm.beginTransaction().add(fragment, TAG).commit(); 
    } 
    return fragment; 
} 
+0

這項工作真的很好的工作。謝謝你的提示。 – Happo 2012-08-15 16:25:26

+0

很棒。可惜你添加的行不包含在官方的[documentation](http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html)中。 – Ron 2013-01-12 08:38:39