問題: mChildFrgamentManager
再作成中です ( https://code.google.com/p/android/issues/detail?id=74222 )
回避策:mChildFrgamentManager
フラグメントに次のものがある場合は保持しますsetRetainInstance(true)
:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (getRetainInstance()) {
if (mRetainedChildFragmentManager != null) {
try {
Field childFMField = Fragment.class.getDeclaredField("mChildFragmentManager");
childFMField.setAccessible(true);
childFMField.set(this, mRetainedChildFragmentManager);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else {
mRetainedChildFragmentManager = getChildFragmentManager();
}
}
}
警告:このコードでは、 のsetRetainInstace
前に を呼び出す必要がありますonAttach
。
PS: これは @attels の回答を少し改良したものです。