Android 无法重用片段以使用LruCache

Android 无法重用片段以使用LruCache,android,android-fragments,android-lru-cache,Android,Android Fragments,Android Lru Cache,我正在使用Google的示例跨配置更改缓存位图,几乎是逐行缓存: 当一个字段更新时,我调用addBitmapToMemoryCache,这是在配置更改(设备旋转)之前。但是,将调试信息放入findOrCreateRetainFragment后: public static RetainFragment findOrCreateRetainFragment(FragmentManager fm) { RetainFragment fragment = (RetainFragment) f

我正在使用Google的示例跨配置更改缓存位图,几乎是逐行缓存:

当一个字段更新时,我调用addBitmapToMemoryCache,这是在配置更改(设备旋转)之前。但是,将调试信息放入findOrCreateRetainFragment后:

public static RetainFragment findOrCreateRetainFragment(FragmentManager fm) {
    RetainFragment fragment = (RetainFragment) fm.findFragmentByTag(TAG);
    if (fragment == null) {
        fragment = new RetainFragment();
        Log.w("myapp", "instanciating new retainfragment");
        fm.beginTransaction().add(fragment, TAG).commit();
    } else {
        Log.w("myapp", "using old retainfragment");
    }
    return fragment;
}
片段总是新实例化的,因此我永远无法访问旧的LruCache,尽管
setRetainInstance(true)
。谷歌的例子有什么问题吗?我正在使用v4支持FragmentManager

以下是我的onCreate的相关部分:

RetainFragment retainFragment =
            RetainFragment.findOrCreateRetainFragment(getSupportFragmentManager());
mMemoryCache = retainFragment.mRetainedCache;
if (mMemoryCache == null) {
    mMemoryCache = new LruCache<String, Bitmap>(3 * 1024 * 1024) {
        @Override
        protected int sizeOf(String key, Bitmap bitmap) {
            return bitmap.getByteCount() / 1024;
        }
    };
    retainFragment.mRetainedCache = mMemoryCache;
} else {
    backgroundsByMonth = new ArrayList<>();
    for (int i = 0; i < 12; i++) {
        BitmapDrawable bd = new BitmapDrawable(getResources(), mMemoryCache.get(Integer.toString(i)));
        backgroundsByMonth.add(bd);
    }
}
RetainFragment RetainFragment=
findOrCreateRetainFragment(getSupportFragmentManager());
mMemoryCache=retainFragment.mRetainedCache;
if(mMemoryCache==null){
mMemoryCache=新的LruCache(3*1024*1024){
@凌驾
受保护的int-sizeOf(字符串键、位图){
返回bitmap.getByteCount()/1024;
}
};
retainFragment.mRetainedCache=mMemoryCache;
}否则{
backgroundsByMonth=新的ArrayList();
对于(int i=0;i<12;i++){
BitmapDrawable bd=新的BitmapDrawable(getResources(),mMemoryCache.get(Integer.toString(i));
背景bmonth.add(bd);
}
}

结果是,我的onSaveInstanceState没有调用超类onSaveInstanceState,这导致片段管理器丢失片段实例。添加

     super.onSaveInstanceState(out);

已修复。

能否将您的
添加到上面的创建
方法中?