gpt4 book ai didi

android - 向上导航和保存的实例数据

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

一个应用程序有 2 个 Activity,A 和 B。

A有保存的实例数据

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("foo", 0);
}

A有

int bar;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
if (savedInstanceState != null) {
bar = savedInstanceState.getInt("foo");
} else {
bar = -1;
}
}

恢复数据。

Activity B 启用了 actionbar 并且

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
// ...
}

启用向上导航。此外,A 在 AndroidManifest.xml 中列为 B 的父 Activity。

当用户从 A 导航到 B 时 onSaveInstanceState 被调用,如果他们使用后退按钮导航回到 A Activity A 正确地恢复它保存的信息。

然而,当用户从 A 导航到 B 时 onSaveInstanceState 被调用,然后使用向上导航返回到 A onCreate(Bundle savedInstanceState) 被传递 null 即使信息已保存。

如何启动导航以传递在 onSaveInstanceState 中创建的 Bundle?

最佳答案

我遇到了同样的问题 - 我只是想有两个 Activity A 和 B,其中 A 是 B 的父级。当你在 B 中并单击向上按钮时,你将返回到 A 并在 onCreate( ) 您从 Bundle 中恢复您的数据。但是,包始终为 null

在大多数情况下,人们建议为 list 中的 Activity 设置 android:launchMode="singleTop"。实际上,这不一定是所需的行为,因为它只是意味着当您单击向上按钮时,不会重新创建父级。您可能会觉得这没问题,但就我而言,我绝对希望重新创建父级以反射(reflect)数据库中的一些更改。

其他解决方案说将监听器附加到向上按钮并添加此代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpFromSameTask(this);
break;
}

return super.onOptionsItemSelected(item);
}

这对我没有任何影响。我实际上不明白这段代码应该做什么。

不过,我想我在另一篇文章中找到了问题的答案。查一下here .

据说:

When you press back, the Activity is destroyed and the data it had is lost. After this you will always get null in the bundle as a new, fresh instance is being created when you reopen the app.

The Bundle savedInstanceState is used when the activity is being recreated due to some changes (like rotation), or because it was paused in the background for a long time.

If you want to persist some data, consider SharedPreferences for small stuff, or maybe a database (SQLite, Realm) or files for large stuff.

我想 bundle 的方法根本不是 Android 期望我们这样做的方式。您应该使用 SharedPreferences 对象并将您的 foo 变量保存在其中。

关于android - 向上导航和保存的实例数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21057607/

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