问题标签 [onsaveinstancestate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
306 浏览

android - onSaveInstanceState Android 后无法执行此操作

我收到 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 。当我执行 fragmentManager.popBackStack() 时。这次崩溃是随机的。我没有在我的活动中覆盖 onSaveInstanceState()。

0 投票
1 回答
558 浏览

onsaveinstancestate - 如何同时使用 onSaveInstanceState(Bundle outState) 和 onSaveInstanceState(Bundle savedInstanceState)?

我正在尝试通过 onSaveInstanceState(Bundle savedInstanceState) 保存计时器的显示时间。但是,我的代码中已经有一个 onSaveInstanceState(Bundle outState),所以我看到“onSaveInstanceState(Bundle) 已经在范围内定义”的警告。

如何同时使用 Bundle savedInstanceState 和 Bundle outstate?

这是 onSaveInstanceState 方法:

这是 onCreate 方法:

0 投票
1 回答
77 浏览

android - 为什么重新创建应用程序但活动的 onCreate 仍然传入了 savedInstanceState

有一个与操作系统相关的错误杀死/恢复活动(或应用程序?)。

经过一些调试发现 if setdon't keep activities和 set Background process limittono background process会导致不同的行为。

看到这篇文章,但它没有回答这里的问题。

这是观察到的:

在应用程序中,它将启动 dagger 组件并维护一些应用程序范围的单例对象,在活动 A(默认启动活动)中,它将通过用户的操作启动活动 B,在 B 中创建并托管一个片段。将有一些数据存储在应用程序范围的单例对象中以与片段一起使用。

如果只有don't keep activities设置,当最小化应用程序时调用 onDestroy() 活动,当重新打开应用程序时,它会恢复最后一个活动活动(比如用户打开活动 B,B 将被重新创建使用 savedInstanceState 恢复的片段)。在这种情况下,由 dagger 管理的应用程序范围单例对象仍然存在,因此状态完全恢复到最小化应用程序之前的状态。

但是,如果两者都don't keep activities设置Background process limitno background process,则在最小化应用程序时,不会调用 Activity 的 onDestroy()(仅调用 onStop())。

此时的行为变化是如果重新打开应用程序,它将从应用程序 onCreate() 开始,并重新创建匕首的组件。所以最小化应用程序之前的状态不会被重新存储。

但是操作系统似乎仍然记得最后一个活动是 B 和 B 的

使用 savedInstanceState 调用,在最小化应用程序时保存数据,B 的片段也是如此。

而且它是一团糟,它有来自 savedInstanceState 的数据,但应用程序范围的单例对象是新的,没有数据与来自 savedInstanceState 的数据一起工作。

任何人都知道在这种情况下 saveInstance 保存在哪里,为什么虽然应用程序似乎被重新创建但最后一个活动(不是启动活动)仍然被重新存储?

0 投票
0 回答
367 浏览

android - Android Espresso 测试保存和恢复实例状态

我尝试在 Espresso 中测试 Activity 的实例状态保存和恢复。

如何测试全生命周期?How to test save and restore state of an android activity with Espresso 中的建议 ? 已经有帮助了,但是我们如何测试 Parcelable 的writeToParcel / createFromParcel东西呢?(意味着当 InstanceState 不仅被保存和恢复,而且在两者之间进行序列化时,如果代码不起作用,这会导致这个很好的“Unmarshalling unknown type code”异常)

使用测试支持库测试规则销毁并重新启动 Activity 不会保留实例状态。

我尝试了一些getInstrumentation().callActivityOnSaveInstanceState(oldActivity, stateBundle);但没有成功。

任何想法?

0 投票
2 回答
1187 浏览

java - 在片段之间导航时保​​存状态

我正在开发一个应用程序,我有一个带有 NavigationDrawer 的菜单来在片段之间导航。在其中一个片段中,我调用了后端,然后将结果保存在列表中。当我导航到另一个片段并返回时,结果消失了,但我想暂时保存列表的内容。我想使用onSaveInstanceState(),但该方法似乎从未被调用过。当我返回片段时,我还查看了数据是否仍在字段中,但事实并非如此。我认为我在 FragmentManager 上做错了,但我不确定。

这是用于片段事务的方法:

我使用 switch case 来确定 Fragment 的类并将其发送到此方法。

我可能会想出一个 hacky-snappy 的方法来解决这个问题,但我想在没有太多 hacky-snappy 代码的情况下解决这个问题。

我希望有人知道如何解决这个问题。提前致谢。

编辑:

这是我的片段类:

0 投票
1 回答
2180 浏览

java - Android SavedInstanceState - 如何从不同类型的方法中保存变量

我正在实现一个简单的应用程序(网球得分),我想保存设置的变量,然后在旋转屏幕时被方法破坏:

}

我接下来要做的是能够保存剩余的(集合的变量),我不能这样做,因为集合的变量具有不同类型的方法(视图),我不能调用它们 onCreate(Bundle savedInstanceState)方法

例子:

有没有办法解决这种问题?谢谢!

0 投票
0 回答
66 浏览

java - onSaveInstanceState() - 只有一次通过

更新:包括实际代码

我正在使用 ArrayList 填充自定义适配器,它在方向更改等方面工作正常:

“创建”

“onSaveInstanceState”

我可以把它弄出来

但是..我需要传递多个变量然后它会中断,看起来它只是我能得到的最后一个插入的变量。

例 1

“创建”

“onSaveInstanceState”

这里“myArrayList”已填充,但“myNameString”为空


前任。2

“创建”

“onSaveInstanceState”

此处“myNameString”已填充,但“myArrayList”为空


原始代码:

0 投票
3 回答
234 浏览

java - 使包含不同对象的ArrayList 可打包

我有两种自定义对象MovieDetailedMovie它们存储在ArrayList<Object>. 进行网络操作后, myArrayList仅填充 typeMovie或 type 的对象DetailedMovie。我正在使用类型对象列表,因为它们链接到适配器,然后适配器根据列表中的对象类型对视图进行排序。

所以,问题是我想将 ArrayList 的内容存储到 onSaveInstanceState 中的 Bundle 中。我的 Movie 和DetailedMovie 对象都实现了Parcelable,但是当我尝试时

有人告诉我

Wrong 2nd argument type. Found: 'java.util.List<java.lang.Object>', required: 'java.util.ArrayList<? extends android.os.Parcelable>'

我怎样才能解决这个问题?

0 投票
0 回答
186 浏览

android - Android:TransactionTooLargeException 但捆绑包大小仅为 368

最后,我能够TransactionTooLargeException在我的应用程序中进行复制

FragmentStatePagerAdapter用来展示几个片段,每个片段都承载一个 RecycleView,并且在单击每个项目时,正在添加另一个片段。

在 recyclerView 屏幕处于前台时按下 Home 按钮时应用程序崩溃

这就是saveState看起来的样子FragmentStatePagerAdapter

如果我尝试记录包大小,它显示在 300 Kb 左右,但 logcat 显示 966576 Kb

只是为了确保这只是使应用程序崩溃的捆绑包如果我在超级应用程序不会崩溃之前将其设为空

想知道我的片段试图保存到 OS 进程的位置

0 投票
0 回答
38 浏览

android - onCreate(Bundle savedInstanceState) 没有恢复保存的数据 - 涉及 mysql

活动 1:SelectBatchStep。RecyclerView 填充了 MySQL 数据库数据

活动 2:完成。在数据库中插入新数据的简单活动。

Activity 1 会在 Activity 2 完成后重新加载,以显示更新后的 recyclerView 项目。

我正在尝试将滚动位置保存在 recyclerview 活动 1 中。我开始了一个新的活动 2,但是当我回调 recyclerview 活动 1 时滚动位置没有恢复。

当我开始新的活动 2 时,Logcat 显示捆绑包已保存并且滚动位置已正确保存。

Activity 2 使用 com.daimajia.swipe.SwipeLayout 库从回收器适配器启动。

活动 1 从活动 2 中调用如下:

活动 1 有以下内容:

Activity 1 来到前面,logcat 显示 Bundle 为空

为什么保存的捆绑包为空?