【发布时间】:2014-11-04 22:47:38
【问题描述】:
在我的应用程序中,我有活动 A。单击此 Activity 上的按钮后,应用程序启动 Activity B。在 Activity B 的 onCreate() 内部,我添加了一个片段。每次创建片段时,它都会使用 AsyncTask 从外部服务器加载一个列表。
如何在配置更改上保留此列表?我已经寻找了许多解决方案,但许多人建议在清单中使用“android:configchanges”,我完全反对使用。许多人建议并且我也读过它 - 使用 setRetainInstance (true) 在 Fragment 中将保留该片段。
我尝试实现它,但失败了。方向更改后的许多教程使用 findFragmentByTag 检查片段,但在我的情况下它总是返回 null。任何人都可以发布有关如何使用 RetainFragments 的正确教程或正确答案吗?
另外,我正在调用 AsyncTask 以在 Fragment 的 onActivityCreated 方法中加载列表。根据 android 文档,使用 setRetainInstance(true) 时,不会调用 onCreate(Bundle),因为没有重新创建片段。 onAttach(Activity) 和 onActivityCreated(Bundle) 仍然会被调用。
那么我应该在 onCreate 方法中调用 AsyncTask 吗?
【问题讨论】:
-
看看 AsyncTaskLoader。这些正是针对您提到的这种情况而制作的。
-
您保存和恢复实例状态了吗?我认为这个问题类似于 [stackoverflow.com/questions/6787071/…
-
你现在的应用行为是什么?
-
当我旋转设备时,Activity 重新创建,因此片段被再次创建。在片段的 onResume 方法中,我调用 AsyncTask 的 execute() 方法,因此它再次加载列表。但我在屏幕上的许多应用程序中看到轮换列表不会再次加载。
-
@vovahost - 我应该更改实现吗?不过我想继续使用片段
标签: android android-fragments android-orientation