解决Fragment内嵌Fragment页面数据无法刷新的问题
在父Fragment中重写
@Override
public void onDestroyView() {
super.onDestroyView();
try {
Field childFragmentManager = Fragment.class
.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
因为Fragment切换时的生命周期06-11 13:29:07.023: I/Fragment(3385): Parent onAttach
06-11 13:29:07.023: I/Fragment(3385): Parent onCreate
06-11 13:29:07.023: I/Fragment(3385): Parent onCreateView
06-11 13:29:07.034: I/Fragment(3385): Parent onActivityCreated
06-11 13:29:07.034: I/Fragment(3385): Parent onStart
06-11 13:29:07.034: I/Fragment(3385): Parent onResume
06-11 13:29:07.040: I/Fragment(3385): Child A onAttach
06-11 13:29:07.040: I/Fragment(3385): Child A onCreate
06-11 13:29:07.045: I/Fragment(3385): Child A onActivityCreated
06-11 13:29:07.049: I/Fragment(3385): Child A onStart
06-11 13:29:07.049: I/Fragment(3385): Child A onResume
06-11 13:29:07.050: I/Fragment(3385): Child B onAttach
06-11 13:29:07.050: I/Fragment(3385): Child B onCreate
06-11 13:29:07.057: I/Fragment(3385): Child B onActivityCreated
06-11 13:29:07.061: I/Fragment(3385): Child B onStart
06-11 13:29:07.061: I/Fragment(3385): Child B onResume
06-11 13:29:09.197: I/Fragment(3385): Child C onAttach
06-11 13:29:09.197: I/Fragment(3385): Child C onCreate
06-11 13:29:09.206: I/Fragment(3385): Child C onActivityCreated
06-11 13:29:09.207: I/Fragment(3385): Child C onStart
06-11 13:29:09.209: I/Fragment(3385): Child C onResume
06-11 13:29:09.550: I/Fragment(3385): Child A onPause
06-11 13:29:09.550: I/Fragment(3385): Child A onStop
06-11 13:29:09.550: I/Fragment(3385): Child A onDestroyView
06-11 13:29:12.673: I/Fragment(3385): Child B onPause
06-11 13:29:12.675: I/Fragment(3385): Child C onPause
06-11 13:29:12.677: I/Fragment(3385): Parent onPause
06-11 13:29:12.677: I/Fragment(3385): Child B onStop
06-11 13:29:12.677: I/Fragment(3385): Child C onStop
06-11 13:29:12.677: I/Fragment(3385): Parent onStop
06-11 13:29:12.680: I/Fragment(3385): Child B onDestroyView
06-11 13:29:12.680: I/Fragment(3385): Child C onDestroyView
06-11 13:29:12.681: I/Fragment(3385): Parent onDestroyView
06-11 13:29:14.456: I/Fragment(3385): Parent onCreateView
06-11 13:29:14.458: I/Fragment(3385): Parent onActivityCreated
06-11 13:29:14.460: I/Fragment(3385): Parent onStart
06-11 13:29:14.460: I/Fragment(3385): Parent onResume
06-11 13:29:14.471: I/Fragment(3385): Child C onAttach
06-11 13:29:14.471: I/Fragment(3385): Child C onCreate
06-11 13:29:14.478: I/Fragment(3385): Child C onActivityCreated
06-11 13:29:14.478: I/Fragment(3385): Child C onStart
06-11 13:29:14.478: I/Fragment(3385): Child C onResume
06-11 13:29:14.478: I/Fragment(3385): Child B onAttach
06-11 13:29:14.478: I/Fragment(3385): Child B onCreate
06-11 13:29:14.502: I/Fragment(3385): Child B onActivityCreated
06-11 13:29:14.506: I/Fragment(3385): Child B onStart
06-11 13:29:14.506: I/Fragment(3385): Child B onResume
06-11 13:29:16.365: I/Fragment(3385): Child A onAttach
06-11 13:29:16.365: I/Fragment(3385): Child A onCreate
06-11 13:29:16.368: I/Fragment(3385): Child A onActivityCreated
06-11 13:29:16.375: I/Fragment(3385): Child A onStart
06-11 13:29:16.375: I/Fragment(3385): Child A onResume
06-11 13:29:12.677: I/Fragment(3385): Child B onStop
06-11 13:29:12.677: I/Fragment(3385): Child C onStop
06-11 13:29:12.677: I/Fragment(3385): Parent onStop
06-11 13:29:12.680: I/Fragment(3385): Child B onDestroyView
06-11 13:29:12.680: I/Fragment(3385): Child C onDestroyView
06-11 13:29:12.681: I/Fragment(3385): Parent onDestroyView
06-11 13:29:14.458: I/Fragment(3385): Parent onActivityCreated
06-11 13:29:14.460: I/Fragment(3385): Parent onStart
06-11 13:29:14.460: I/Fragment(3385): Parent onResume
06-11 13:29:14.478: I/Fragment(3385): Child C onActivityCreated
06-11 13:29:14.478: I/Fragment(3385): Child C onStart
06-11 13:29:14.478: I/Fragment(3385): Child C onResume
06-11 13:29:14.502: I/Fragment(3385): Child B onActivityCreated
06-11 13:29:14.506: I/Fragment(3385): Child B onStart
06-11 13:29:14.506: I/Fragment(3385): Child B onResume
在这个时候因为子Fragment被缓存了,但是Fragment的开发者却没有处理这个Fragment内嵌Fragment数据的问题,所以数据是无法刷新的,想要达到数据刷新的目的,可以重写帖子重置getChildFragmentManager的数据。我是在OnDestroyView中完成的重写。这样就可以完成预期的数据刷新了