我有一个Activity
可以处理许多Fragments
,并且,对于backstack
管理,我有一个自定义堆栈,在其中管理Fragments
的显示/隐藏。我的代码和导航工作正常。
现在,我正在Button
中通过Configuration Fragment
实现应用程序主题更改。为此,我使用方法Activity.Recreate ();来更改主题,并且配置片段的数据与相同的数据一起保留,并且应用程序的主题也发生了完全变化,但是片段BackStack消失了,这是为什么当按下“后退”按钮时,它离开了应用程序,而不是让我回到访问Configuration Fragment
的“片段”或“上一个活动”。
维护我的Activity后退的最佳方法是什么?这可能吗?
重要::仅当调用Activity.Recreate();
时,因为如果以其他方式破坏了Activity,我不希望BackStack退回,我希望我的Activity干净< / em>。
其他:
launchMode
是singleTask
,对于我正在做的应用程序类型,它必须是{1>}。答案 0 :(得分:1)
在代码中添加以下逻辑:
public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState == null) {
// savedInstanceState will be null only when creating the activity for the first time
backstack = new BackStack(); //init your backstack
} else {
// there is a chance that your backstack will be already exists at this point
// if not:
// retrieve the backstack with savedInstanceState.getSerializable("stack")
}
}
在调用recreate()
// changing theme detected
bacstack.clear();
backstack = null;
recreate();
要保存活动破坏(onDestroy)和娱乐(onCreate)之间的堆栈,请使用以下方法:
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
if (backstack != null) // the check isn't necessary, you can just put a null in the bundle
outState.putSerializable("stack", backstack);
}
official guide 用于保存UI状态
onSaveInstanceState
方法可帮助您生存 配置更改和系统启动的进程终止。 link