Java 在调用Activity.Recreate()之后,最好的方法是什么来维护我的活动的backbackback?
我有一个Java 在调用Activity.Recreate()之后,最好的方法是什么来维护我的活动的backbackback?,java,c#,android,xamarin,xamarin.android,Java,C#,Android,Xamarin,Xamarin.android,我有一个活动,它处理许多片段,对于backstack管理,我有一个自定义堆栈,在其中我管理片段的显示/隐藏。我的代码和导航工作得很好 现在,我正在通过配置片段中的按钮实现应用程序主题更改。为此,我使用更改主题的方法,配置片段的数据保留为相同的数据,并且应用程序的主题完全更改,但是片段的回退消失,原因是,当按下后退按钮时,它离开应用程序,而不是将我发送回片段或以前的活动,从那里我访问了配置片段 什么是保持我活动的最佳方式?这是可能的吗 重要提示:仅当活动。重新创建()时,因为如果活动以任何其他方式
活动
,它处理许多片段
,对于backstack
管理,我有一个自定义堆栈,在其中我管理片段的显示/隐藏。我的代码和导航工作得很好
现在,我正在通过配置片段中的按钮实现应用程序主题更改。为此,我使用更改主题的方法,配置片段的数据保留为相同的数据,并且应用程序的主题完全更改,但是片段的回退消失,原因是,当按下后退按钮时,它离开应用程序,而不是将我发送回片段或以前的活动,从那里我访问了配置片段
什么是保持我活动的最佳方式?这是可能的吗
重要提示:仅当活动。重新创建()时调用code>,因为如果活动以任何其他方式被破坏,我不希望返回,我希望我的活动干净
附加:
- 我的应用程序的方向设置处于纵向模式
- 我的活动的
launchMode
是singleTask
,对于我正在执行的应用程序类型,它必须是这样
从文件和答案
将以下逻辑添加到代码中:
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()
要在活动的销毁(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);
}
用于保存UI状态
onSaveInstanceState
方法可帮助您的活动生存下来
配置更改和系统启动的进程死亡。
通常,当你用原生android或语言更改应用程序的主题时,总是建议你回到应用程序的主页,我的意思是重新启动应用程序,这是唯一正确的方法,另一方面,如果您使用recreate,它将破坏您当前的活动实例,因此清除所有的片段backstack,您可能会说您将把片段backstack保存在某个地方,并使用bundle实例像以前一样重新创建它们(我不建议这样做,因为它容易出现人为错误,并且不会有所需的op)
@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);
}