Android Fragment内嵌Fragment页面不刷新数据问题

解决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


生命周期数据证明,Fragment首次加载的时候触发五个生命周期, onAttach(), onCreate(), onActivityCreated(), onStart(), onResume(),  在Fragment失去焦点的时候触发三个生命周期onPause(), onStop(), onDestroyView(), 在这个时候Fragment虽然View被销毁,但是数据依旧被保存。
在父Fragment切换到同级页面的时候会执行子Fragment的OnStop(), 父Fragment的OnStop(),子Fragment的onDestroyView(), 父Fragment的onDestroyView()

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


在重新让父Fragment获取焦点的时候触发的生命周期

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中完成的重写。这样就可以完成预期的数据刷新了


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值