因此,有一些类似的问题,但我没有找到一个解决这个问题的答案。官方Android文档看起来很直观,但当我用更复杂的工作流实现应用程序时,片段回退栈变得混乱,奇怪的事情开始发生。我为简单应用程序开发了一个框架,其思想是一个可以通过其片段访问的单个活动以启动其他片段。我是这样做的:
1- 我让我的主要活动实现了一个名为“FragmentDelegate”的接口。
public interface FragmentDelegate {
public void startFragment(CCFragment fragment, boolean addToBackStack);
}
2- startFrargment方法的实现:
@Override
public void startFragment(CCFragment fragment, boolean addToBackStack) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragment.setFragmentDelegate(this);
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_right,
R.anim.slide_out_left, R.anim.slide_in_left,
R.anim.slide_out_right);
fragmentTransaction.replace(CONTENT_VIEW_ID, fragment,
"callerFragmentClassName");
if (addToBackStack)
fragmentTransaction.addToBackStack("callerFragmentClassName");
fragmentTransaction.commitAllowingStateLoss();
}
这个很酷的地方在于,我可以从任何片段调用:
mFragmentDelegate.startFragment(aNewFragment, addToBackStack);
好的,现在考虑以下情况:
我从一个初始的片段A开始我的活动。从片段A开始,我调用相机活动以获取结果。当结果到达时,我启动片段B(将A添加到后退栈)。从B开始,我启动片段C 而不 将B添加到后退栈中。因此,我们在后退栈中有这个:
[A] [C]
如果我按返回按钮,我会回到A。 如果我重复这个过程,后退栈就会混乱,当我按返回键时,它会一遍又一遍地带我回到C片段......
我知道这很难理解(对我来说更难解释,因为英语不是我的母语),但如果有人能够解释一下Android片段后退栈如何真正工作,或者提供某种应用程序框架,那就太好了。