如果在方向更改时保存对象,则不推荐使用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,
sample project
由于我使用的是兼容性软件包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
答案 0 :(得分:42)
您可以使用onRetainCustomNonConfigurationInstance.
使用它而不是onRetainNonConfigurationInstance()。稍后检索 使用getLastCustomNonConfigurationInstance()。
答案 1 :(得分:12)
有两种选择:
Loader
。 FragmentActivity
将在重新创建时保存/恢复其状态。setRetainInstance(true)
。在兼容性库的源代码,FragmentRetainInstanceSupport或其他一些例子中就有这样的例子。答案 2 :(得分:5)
当您的片段暂停时,它会调用此方法:
@Override
public void onSaveInstanceState(Bundle outState) {
// Add variable to outState here
super.onSaveInstanceState(outState);
}
当Fragment重新启动时,变量outState
将被输入onCreate()方法。
您可以保存任何基本类型的数据或实现Parcelable
接口
答案 3 :(得分:-1)
好吧,请引用Android Developers' References
:
当活动出现时,在onStart()之后调用此方法 从之前保存的状态重新初始化,在此处给出 savedInstanceState。大多数实现都会使用 onCreate(Bundle)恢复他们的状态,但有时候 在完成所有初始化之后,这里可以方便地完成 或者允许子类决定是否使用默认值 实现。此方法的默认实现执行 恢复之前被冻结的任何视图状态 的onSaveInstanceState(束)。
关于onSaveInstanceState()
的使用,最好使用onRestoreInstanceState()
来恢复您的对象/事物。