所以,我知道问题是重复的,但我没有在这些答案中找到解决方案。 我有一个MainActivity和GameDetailActivity。 GameAetailActivity的MainActivity层次结构父级。这是清单文件中的声明:
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme2"
android:noHistory="false"
>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".GameDetailActivity"
android:theme="@style/AppTheme2"
android:parentActivityName=".MainActivity"
android:noHistory="false"
>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.exam.example.MainActivity"/>
</activity>
这里AppTheme2声明:
<style name="AppTheme2" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
这里回到GameDetailActivity中的逻辑:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(upIntent)
.startActivities();
} else {
NavUtils.navigateUpTo(this, upIntent);
}
return true;
default:break;
}
return super.onOptionsItemSelected(item);
}
当我在GameDetailActivity中按下home(返回“&lt; - ”)按钮时,我总是在MainActivity中将savedInstanceState设为null。我不明白为什么保存的数据在MainActivity中丢失了。
修改
这里启动GameDetailActivity代码:
Intent i = new Intent(getActivity(), GameDetailActivity.class);
i.putExtra("game", clickedGame);
startActivity(i);
有人知道如何解决这个问题吗?
提前谢谢
答案 0 :(得分:1)
使用新的后台进行导航
用户在输入活动后按下向上按钮 另一个应用程序的任务,您的应用程序启动
new task with
相应的任务 在导航之前回到堆栈。
<强>解决方案强>
导航至家长活动
当您调用此方法时,它将完成当前活动并启动
(or resumes)
适当的父活动。如果是目标父母 活动在任务的后台堆栈中,它是brought forward.
方式 提出取决于父母活动是否能够 处理onNewIntent()调用。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
答案 1 :(得分:1)
如果设置,则正在启动的活动已在运行中 当前任务,然后而不是启动它的新实例 活动,其上的所有其他活动将被关闭 这个意图将作为一个传递到(现在在顶部)旧活动 新的意图。 愿这可以解决你的问题
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()== android.R.id.home) {
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, intent);
return true;
}
return super.onOptionsItemSelected(item);
}
答案 2 :(得分:1)
@NgModule({
imports: [ BrowserModule ],
declarations: [ App, Parent, Transcluded1, Transcluded2 ],
providers: [
{provide: TranscludedBase, useExisting: Transcluded1, multi:true}
{provide: TranscludedBase, useExisting: Transcluded2, multi:true}
],
bootstrap: [ App ]
})
捆绑包已保存在savedInstanceState
。
onSaveInstanceState()
(例如回收资源,或者由于配置更改)时,会调用 onSaveInstanceState()
,不能保证只需通过浏览活动就可以调用它。