我可以通过缓存片段来做到这一点,因为我将它们添加到我自己的 ArrayList 中。然后我设置了一个 OnBackStackChangedListener 来跟踪显示的是哪一个,并在必要时弹出 ArrayList。
我的目的有点不同,但下面的代码应该是您所描述的内容。标签是这样的,如果需要,您可以有多个后堆栈。它不会按原样编译(我已经剪辑了很多自己的代码),但应该让您了解我是如何做到的。附加免责声明:我刚刚开始工作,可能还有一些我还没有遇到的问题。
public void replaceFragmentWithBackStackForTag(Fragment fragment, String tag)
{
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(visibleFragment);
ft.add(R.id.realtabcontent, fragment, tag);
ft.attach(fragment);
ft.addToBackStack(null);
manualBackStacks.get(tag).add(fragment);
ft.commit();
this.getSupportFragmentManager().executePendingTransactions();
}
在方向更改后重新创建活动的位置所需的代码:
ArrayList<Fragment> backStack =
new ArrayList<Fragment>(manualBackStacks.get(tag));
popArrayListToIndex(manualBackStacks.get(tag), 0); // helper I wrote
for (int bs = 1; bs < backStack.size(); bs++) {
replaceFragmentWithBackStackForTag(backStack.get(bs), tag);
}
后台监听器:
public void onBackStackChanged() {
int index = getSupportFragmentManager().getBackStackEntryCount();
ArrayList<Fragment> backStack = manualBackStacks.get(tag);
visibleFragment = backStack.get(index);
// Pop the last element if we've backed up.
popArrayListToIndex(backStack, index);
}
希望这可以帮助。