android - fragment 数据丢失?状态丢失?
最佳答案
一些状态丢失的例子:
1. 假设您有一个按钮和一个 TextView 。在代码中,你已经定义了初始值为 0 的整数 i,它通过单击按钮递增 1,并且它的值显示在 TextView 中。假设你已经按下按钮 5 次,那么 textview 将被设置为 0。也就是说 Integer 在屏幕变化时丢失了它的值。
解决方案:覆盖 onSaveInstanceState 并输入整数值。然后在 onResume 或 onCreate 方法中保留该整数的值。
2. 假设您有一个待办事项 ListView 。用户动态添加到该 ListView 中的dos。假设用户添加了 3 个项目,然后在屏幕旋转时(或者如果应用程序重新启动), ListView 将变为空。
解决方案: 再次在 onSaveInstanceState 中,放入 ArrayList。 (列表可以实现为“Serializabe”或“Parcelable”,并且可以作为一个整体存储。您不需要存储 ListView 的每个项目)。然后在 onResume 或 onCreate 方法中,获取该 ListView 。
3.屏幕旋转时,屏幕中的所有编辑文本都将变为空。
我对状态丢失的简单理解是,只要配置发生变化(屏幕旋转或应用重启), Activity 的整个生命周期都会被调用。因此,任何未保存的内容都将丢失。
好吧,这让我想起任天堂的退出屏幕消息,“任何未保存的内容都将丢失”。
android onSaveInstanceState
当Android应用程序的活动被系统销毁时,系统会调用onSaveInstanceState()
方法来保存活动的当前状态。该方法获取一个Bundle
对象作为参数,可以用来存储和传递数据。当活动被重新创建时,可以通过onRestoreInstanceState()
方法来恢复之前保存的状态。
以下是一个示例代码:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 在此处保存需要的状态数据到outState中
outState.putString("key", "value");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// 在此处恢复之前保存的状态数据
String value = savedInstanceState.getString("key");
}