gpt4 book ai didi

Android onConfigurationChanged : how to save and restore fragment back stack?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:55:16 26 4
gpt4 key购买 nike

我有一个带有双 Pane 的 Activity :左侧是菜单项列表( fragment M),右侧是当前所选项目的详细信息( fragment D)。

当用户选择 fragment D 中的项目时, fragment D 会被另一个 fragment 替换(我们称之为 D1)。当用户选择 fragment D1 中的项目时, fragment D1 会被另一个 fragment (我们称之为 D2)替换,依此类推。当然,当用户按下后退按钮时,她可以在 fragment 历史中返回:D2->D1->D。

我的问题是:如何在配置更改时(特别是在屏幕方向上)保存和恢复完整的 fragment 返回堆栈?

我觉得很奇怪以前没有其他人遇到过这个问题,但是我在 Google 和 Stack Overflow 上搜索时没有找到任何相关信息。如果我错过了任何相关的帖子,请告诉我。

我知道我可以简单地将 android:configChanges="orientation|screenSize" 属性添加到我的 Activity 中以避免 Activity 重新生成,但我就是不能那样做。

我不能这样做的原因是我正在使用 Action Bar Sherlock(第 4 版)来实现向后兼容性,并且该组件需要 Activity 重新创建才能在配置更改时正确运行,AFAIK。

如果有另一种方法可以在不破坏和重新创建 Activity 的情况下重新创建 Action Bar Sherlock 组件,请告诉我。

提前致谢。

最佳答案

我能够通过在将 fragment 添加到我自己的 ArrayList 中时缓存 fragment 来做到这一点。然后我设置了一个 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();
}

您需要在方向更改后重新创建 Activity 的代码:

 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);
}

希望这对您有所帮助。

关于Android onConfigurationChanged : how to save and restore fragment back stack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com