正确使用实例状态从片段中保存

时间:2016-04-27 12:23:25

标签: java android android-fragments

我有一个片段onCreateView我做了一个后台asyn调用来获取要显示的数据 我将作为后台调用结果的对象保存为片段的成员变量 当我看到UI和数据都没问题时,当我按下主页按钮时,应用程序会转到后台。当我重新打开应用程序时,我的片段会在UI中填充数据 所以现在我不确定以下几点:
1)我应该将我的对象保存在onSaveInstanceState吗? 2)我应该在哪里恢复它?在onCreateView中传递的捆绑包中 3)什么时候将数据保存在我的捆绑包中?我的意思是如何在不保存它的情况下看到它,我会丢失我的UI中的数据?

3 个答案:

答案 0 :(得分:1)

在片段构造函数中,添加以下行:

 setRetainInstance(true);
  

控制是否在Activity中保留片段实例   重新创建(例如从配置更改)。

答案 1 :(得分:0)

这取决于您的数据(大小)。

你想在后面的堆栈上有一个片段(你不能保留片段吗?)

用于"主页按钮操作"和非保留的Fragment实现Parcelable接口并使用onSaveInstanceState()来保存和onCreateView()/ onCreate()以从Bundle恢复数据。

请注意后退按钮,您将丢失数据。

答案 2 :(得分:0)

  

也像活动一样,您可以使用a保留片段的状态   捆绑,以防活动的过程被杀死,你需要   重新创建活动时恢复片段状态。您可以   在片段的onSaveInstanceState()回调期间保存状态   并在onCreate(),onCreateView()或中恢复它   onActivityCreated()。有关保存状态的更多信息,请参阅   活动文件。

通过每次显示数据,您的片段似乎都能正常工作。

如果您想保存其数据以避免异步提取,可以使用onSaveInstanceState,这需要您使用Bundle保存数据。

然后在onCreateView中检查savedInstanceStatenull,是否进行异步提取,否则从savedInstanceState Bundle重新创建数据。< / p>