【发布时间】:2024-01-16 02:29:01
【问题描述】:
有什么办法,如何在存储的片段中不调用 onCreateView() 清除支持 FragmentManager 的 backStack?
我了解片段生命周期并在弹出时调用 onDestroyView() 和 onCreateView()。 http://developer.android.com/guide/components/fragments.html#Creating
我也知道如何从 backstack 中弹出所有片段
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
或
for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) {
mFragmentManager.popBackStack();
}
但两种方式都调用 onCreateView() 和其他生命周期方法,直到 onDestroyView() 和 onDestroy()。
但是有什么办法,如何清除这个 backstack,只从 onDestroyView() 调用而不是从 onCreateView()(片段内部)调用?
或者有什么办法可以用清除以前的片段来替换事务?
例如,我想在进行交易之前明确回溯:
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.beginTransaction().replace(R.id.content, fragment).commit();
【问题讨论】:
-
您的目标是避免在片段视图从堆栈中弹出时重新创建它们,因为您知道当弹出完成时,最终片段状态将被“销毁”?
-
是的,这正是我想要的
-
万一,你能解决这个问题吗?我现在在做单活动架构时遇到了同样的问题。
-
@EdwinMartinez 不是真的。我所做的(我并不为此感到自豪),活动中的“cleaningBackstack”属性的丑陋解决方法。所以活动中的代码如下所示:```cleaningBackstack = true; fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); fragmentManager.executePendingTransactions(); cleanBackstack = false; ``` 并在 onViewCreated 片段中: ``` if (a.isCleaningBackstack()) return; ```
标签: android android-fragments back-stack fragmenttransaction fragment-backstack