Android,FragmentTransaction.add后的片段状态

Android,FragmentTransaction.add后的片段状态,android,android-fragments,Android,Android Fragments,我有两个碎片 前景中的碎片 现在我用FragmentTransaction.add(id,Fagment),(而不是。replace)来显示fragmentA,因此fragmentA仍然是活动的,fragmentB位于其上 现在我使用back按钮,这里碎片B被销毁,留下碎片A可见 此时此刻,我怎么知道fragmentA已返回“前台”,即onResume 注意,onResume没有被调用,因为FragmentTransaction.add(id,Fagment),换句话说,当显示fragmentB

我有两个碎片

前景中的碎片

现在我用FragmentTransaction.add(id,Fagment),(而不是
。replace
)来显示fragmentA,因此fragmentA仍然是活动的,fragmentB位于其上

现在我使用
back
按钮,这里碎片B被销毁,留下碎片A可见

此时此刻,我怎么知道fragmentA已返回“前台”,即
onResume

注意,
onResume
没有被调用,因为
FragmentTransaction.add(id,Fagment)
,换句话说,当显示fragmentB时,fragmentA不会进入
onPause


非常感谢您的帮助

如果您想知道片段A何时再次可见,可以先将其隐藏在创建片段B的片段事务中:

fragmentTransaction.add(id, fragmentB).hide(fragmentA).addToBackStack(null);
然后在片段A中,覆盖onHiddenChanged:

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    // Handle visibility changed. Note this method is called only when the state is changed.
}
当按下后退按钮时,片段事务将被反转,片段的状态将更改为可见。有一件事你必须注意:我注意到隐藏状态在活动旋转之间不会被保留,所以你必须在onSaveInstanceState中执行你自己的簿记。我做了一些与您要求的类似的事情,因为在我的例子中,片段视图的重建成本很高


在这样做之前,您可能需要考虑另一种方式处理片段,如用.ReStor()代替.Ad()。如果新片段完全隐藏了您的片段,那么您可能不需要将其保留在周围,并且您可以让片段管理器在用户点击后退按钮后将其恢复。这样,您就可以使用正常的生命周期功能,如onPause和onResume

我同意你的观点,如果我使用.replace代替.add,那么使用onPause和onResume就可以了,但是我只使用了动画(因为我只有3个非常轻的片段),我使用了一个从左侧开始的幻灯片动画,使第二个视图覆盖第一个视图,而不使第一个视图移动,我会用隐藏法试试,谢谢+1感谢您对配置更改中未保留隐藏状态的评论!这看起来像一个bug:/?无法想象它是这样工作的,因为它真的把事情搞砸了。另一方面:如果您需要与前面的片段通信,那么使用replace不是一个选项——至少我听说了这一点。如果你需要原始片段,如果你能接受它的再创造,我想它会好的。