2012-04-08 98 views
0

我的应用程序使用片段在纵向模式下以纵向模式显示ListView或并排显示ListView和“细节”视图。我在ActionBar中也有一个菜单项,它启动了一个AsyncTask。问题是,如果用户在AsyncTask正在运行时将其显示从纵向旋转到横向(反之亦然),则AsyncTask会被终止。从停止固定的AsyncTask,我添加了configChanges归因于AndroidManifest:使用AsyncTask切换片段

<activity android:name="ListingFragment" android:configChanges="keyboardHidden|orientation" /> 

然而,添加则该属性防止碎片从自动切换到横向/纵向视图。有什么办法可以让碎片自动切换他们的视图而不杀死AsyncTask?

回答

1

您需要在活动死亡之前保存您的asynctask的实例。您可以使用onRetainCustomNonConfigurationInstance()进行保存。然后在您的创建者中,您可以使用getLastCustomNonConfigurationInstance()来检索它。然后在你的onCreate中,你可以再次将你的活动“附加”到asynctask。

+0

我认为onRetainCustomNonConfigurationInstance()已被弃用,文档说使用setRetainInstance() – 2012-04-10 00:05:36

+0

这是出于不同的目的。如果调用'setRetainInstance(true)'这意味着Fragment实例不会被该活动破坏,它将被保留(传递),新活动将获得这个片段而不是创建一个新片段。 即使'onRetain ...'被弃用,我不知道他们提供了另一种通过活动destroy-create cycles保留对象实例的方法。 – dmon 2012-04-10 00:08:03

+0

相关提示然后我会使用onRetainCustomNonConfigurationInstance()。感谢您的回应。 – 2012-04-10 00:13:55