方向更改时保存对象
如何在方向更改时保存Object,因为onRetainNonConfigurationInstance和getLastNonConfigurationInstance已被弃用。 和哪些不能用于compatibility package
android-support-v4.jar
FragmentActivity
,它显示的位置Cannot override the final method from FragmentActivity
开发者网站说
改用新的Fragment API setRetainInstance(boolean);
但我不知道如何使用setRetainInstance保存自定义对象
我的场景:
在我的活动中,我有一个带有进度对话框的AsyncTask。 在这里,我需要处理方向的变化。
为此我从CommonsWare的Mark Murphy那里得到了非常好的答案
background-task-progress-dialog-orientation-change-is-there-any-100-working ,
与示例项目
因为我正在使用兼容性包android-support-v4.jar, FragmentActivity
,我不能重写onRetainNonConfigurationInstance
无法重写FragmentActivity的最后一个方法
有没有其他的方法来保存我的自定义对象?
编辑:我不能让我的AsyncTask任务Parcelable(如果我没有错),因为它使用接口,上下文等我的AsyncTask
public class CommonAsyncTask extends AsyncTask<Object, Object, Object> { Context context; AsyncTaskServices callerObject; ProgressDialog progressDialog; String dialogMessag ; ................
我正在寻找,是否有任何替代方法onRetainNonConfigurationInstance方法,保存一个对象完全方向变化,以后可以检索使用getLastNonConfigurationInstance
有两种select:
- 使用
Loader
。FragmentActivity
将在重新创build时负责保存/恢复其状态。 - 使用没有视图的片段,并调用
setRetainInstance(true)
。 在兼容性库的源代码,FragmentRetainInstanceSupport或者其他的例子中有一个这样的例子。
你可以使用onRetainCustomNonConfigurationInstance。
使用这个而不是onRetainNonConfigurationInstance()。 稍后使用getLastCustomNonConfigurationInstance()检索。
当你的Fragment被暂停时,它会调用这个方法:
@Override public void onSaveInstanceState(Bundle outState) { // Add variable to outState here super.onSaveInstanceState(outState); }
当片段重新启动时, outState
variables将被送入onCreate()方法。
您可以保存任何基本types的数据或实现Parcelable
接口
那么,从Android Developers' References
:
这个方法在onStart()之后被调用,当这个活动正在从之前保存的状态重新初始化时,这里在savedInstanceState中给出。 大多数实现只是简单地使用onCreate(Bundle)来恢复它们的状态,但是在完成所有的初始化或者允许子类决定是否使用你的默认实现之后,这样做有时候会很方便。 此方法的默认实现会执行之前由onSaveInstanceState(Bundle)冻结的任何视图状态的还原。
关于使用onSaveInstanceState()
,最好通过使用onRestoreInstanceState()
来代替对象/事物。
参考Activity#onRestoreInstanceState()