簡體   English   中英

處理運行時方向更改android

[英]Handling runtime Orientation Changes in android

在我的應用程序中,我有活動A.單擊此活動上的按鈕,應用程序啟動活動B.Inside活動B的onCreate()我添加一個片段。每次創建一個片段,它使用AsyncTask從外部服務器加載一個列表。

如何在配置更改中保留此列表?我已經尋找了許多解決方案,但很多建議在清單中使用'android:configchanges',我完全反對使用。很多建議我也讀過它 - 使用setRetainInstance(true)在片段中將保留片段。

我試圖實現它,但我失敗了。在方向更改后的許多教程使用findFragmentByTag檢查Fragment但在我的情況下它總是返回null。任何人都可以發布正確的教程或如何使用RetainFragments的正確答案?

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

那么我應該在onCreate方法中調用AsyncTask嗎?

我不確定你是否記得這個:

警告:每次用戶旋轉屏幕時,您的活動都將被銷毀並重新創建。 當屏幕更改方向時,系統會破壞並重新創建前台活動,因為屏幕配置已更改,您的活動可能需要加載其他資源(例如布局)。

我強烈推薦你這篇文章:
使用片段處理配置更改
http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

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

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

檢查一下 本教程用於跨方向更改保留MediaPlayer實例。 它很直接。 它使用片段的setRetainInstance(true)來保持MediaPlayer的方向更改。

這部分解釋了在定向chage期間觸發的片段的回調

onAttach - 永遠

onCreate - 不是配置更改

onStart - 永遠

onResume - 永遠


onPause - 總是

onStop - 永遠

onDestroy - 不是配置更改

onDetach - 永遠

因此,只需在此片段中創建對服務器響應的引用,並在onCreate中調用服務器。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM