Android,片段状态在FragmentTransaction.add之后

时间:2013-12-21 00:15:01

标签: android android-fragments

我有两个片段,

前景中的

fragmentA

现在我用FragmentTransaction.add(id, Fagment)显示fragmentB,(不是.replace)所以fragmentA仍然存活,其上有fragmentB,

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

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

请注意,由于onResumeFragmentTransaction.add(id, Fagment)未被调用,换句话说,当显示fragmentB时,fragmentA不会onPause

非常感谢你的帮助

1 个答案:

答案 0 :(得分:7)

如果您想知道片段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中执行自己的簿记。我做了类似于你所问的事情,因为在我的例子中,片段视图的重建成本很高。

在执行此操作之前,您可能需要考虑以另一种方式处理片段,例如使用.replace()而不是.add()。如果您的片段被新片段完全隐藏,那么您可能不需要保留它,并且一旦用户点击后退按钮,您就可以让片段管理器将其恢复。这样,您可以使用正常的生命周期函数,如onPause和onResume。