我有两个片段,
前景中的fragmentA
现在我用FragmentTransaction.add(id, Fagment)
显示fragmentB,(不是.replace
)所以fragmentA仍然存活,其上有fragmentB,
现在我使用back
按钮,这里片段B被销毁,片段A可见,
此时此刻,我怎么知道fragmentA已经返回“前景”,即onResume
,
请注意,由于onResume
,FragmentTransaction.add(id, Fagment)
未被调用,换句话说,当显示fragmentB时,fragmentA不会onPause
非常感谢你的帮助
答案 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。