我有两个 fragment ,
前景中的 fragment A
现在我用 FragmentTransaction.add(id, Fagment)
显示 fragmentB,(不是 .replace
)所以 fragmentA 仍然存在,fragmentB 在它上面,
现在我使用 back
按钮,这里 fragmentB 被销毁,fragmentA 可见,
此时,我怎么知道fragmentA已经回到“前台”,即onResume
,
请注意 onResume
不会被调用,因为 FragmentTransaction.add(id, Fagment)
,换句话说,fragmentA 不会进入 onPause
当显示 fragment B时
非常感谢你的帮助
最佳答案
如果想知道 fragment A什么时候再次可见,可以先将其隐藏在创建 fragment B的 fragment 事务中:
fragmentTransaction.add(id, fragmentB).hide(fragmentA).addToBackStack(null);
然后在 Fragment 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.
}
当按下后退按钮时, fragment 事务将被撤销, fragment 的状态将变为可见。您必须注意一件事:我注意到隐藏状态不会在 Activity 轮换之间保留,因此您必须在 onSaveInstanceState 中执行自己的簿记。我做的事情与您的要求类似,因为在我的情况下, fragment View 的重新创建成本很高。
不过,在执行此操作之前,您可能需要考虑以其他方式处理您的 fragment ,例如使用 .replace() 而不是 .add()。如果您的 fragment 完全被新 fragment 隐藏,那么也许您不需要保留它,您可以让 fragment 管理器在用户点击后退按钮后将其带回。这样,您就可以只使用正常的生命周期函数,例如 onPause 和 onResume。
关于Android,FragmentTransaction.add 之后的 fragment 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20713937/