2014-11-04 105 views
1

在我的應用程序中,我有活動A.單擊此活動上的按鈕後,應用程序啓動活動B.Inside活動B的onCreate()我添加一個片段。每次創建一個片段時,它會加載一個列表從外部服務器使用AsyncTask。處理運行時方向更改android

我該如何堅持這個列表的配置更改?我已經尋找了很多解決方案,但許多人建議在清單中使用'android:configchanges',我完全反對使用。許多建議和我已閱讀關於它 - 也可以使用在片段中保留片段的setRetainInstance(true)。

我試圖實現它,但我失敗了。方向更改後的很多教程使用findFragmentByTag檢查片段,但在我的情況下,它總是返回null.Can任何人請發佈適當的教程或如何使用RetainFragments的正確答案?

另外我調用AsyncTask加載Fragment中的onActivityCreated方法列表。根據android文檔使用setRetainInstance(true)時,onCreate(Bundle)將不會被調用,因爲片段不會被重新創建。 onAttach(Activity)和onActivityCreated(Bundle)仍然會被調用。

所以我應該在onCreate方法中調用AsyncTask?

注意:您的活動將被銷燬,每個用戶旋轉屏幕時重新

+1

查看AsyncTaskLoader。這些都是你提到的這種情況。 – 2014-11-04 22:50:42

+0

你有保存和恢復實例狀態嗎?我認爲這個問題類似於[http://stackoverflow.com/questions/6787071/android-fragment-how-to-save-states-of-views-in-a-fragment-when-another-fragmen ?answertab=活動#tab-top] – VizGhar 2014-11-04 22:56:19

+0

現在你的應用行爲是什麼? – vovahost 2014-11-04 23:08:47

回答

2

我,如果你還記得這個我不知道。當屏幕改變方向時,系統會破壞並重新創建前景活動,因爲屏幕配置已更改,您的活動可能需要加載替代資源(例如佈局)。

我higly建議你這個帖子:
處理配置更改片段
http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

注:爲了讓Android系統以恢復您的活動的意見的狀態,每個視圖必須有一個由android:id屬性提供的唯一ID。

來源:http://developer.android.com/training/basics/activity-lifecycle/recreating.html

+0

我在這裏提到我完全反對使用android:configchanges – akg 2014-11-04 23:08:38

1

檢查this。 本教程用於跨定位更改保留MediaPlayer實例。它非常直接。它使用片段的setRetainInstance(true)來保留MediaPlayer的方向更改。

這部分解釋了片段的方向恰克

onAttach期間解僱回調 - 總是

的onCreate - 而不是在配置變化

在onStart - 總是

的onResume - 總是


的onPause - 總是

的onStop - 總是

的onDestroy - 而不是在配置變化

onDetach - 總是

所以才創建這個片段到你的服務器響應參考,並撥打電話到onCreate中的服務器。

您可以使用activity的isChangingConfigurations()方法來了解是否因方向更改而調用片段的生命週期,或者如果要釋放某些資源,則會破壞片段。

在活動中使用FragmentManager檢查是否存在片段的實例已經存在,如果沒有創建新的並添加它。