2012-04-08 93 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