2012-12-20 107 views
0

所以..從活動保留的AsyncTask,不分段

我有如下所示,基於viewpager利用tabhosts等我的活動複雜的片段。這是基本設置。

一旦創建完成,我使用AsyncTask從我的數據庫中獲取一些數據。當ASyncTask完成後,我使用fragmentmanager查找viewpager的各個片段,並在設置數據的每個片段內調用函數。例如,在片段A中,數據被設置爲列表適配器內的列表,片段B中的數據被繪製在地圖上。

我已經這樣設置它,因爲所有的片段都使用相同的數據,我只想調用一個ASyncTask。它完美的作品。

我的問題是當用戶在加載時旋轉屏幕。因此,從片段中調用一個ASyncTask,您可以使用setRetainInstance,並且之前可以在一個活動中使用onRetainNoneConfigurationInstance ..但現在已被棄用。

我已經花了年齡搜索,沒有人似乎有這種特定情況下的答案..

誰能指教?

回答

2

您可以使用不可見的Fragment來保留您的狀態。它基本上與onRetainNoneConfigurationInstance相同,但未被棄用。

看到http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#config-changes

有在本例中的錯誤,你必須在RetainFragment添加到FragmentManager或者它不會被恢復。

public static RetainFragment findOrCreateRetainFragment(FragmentManager fm) { 
    RetainFragment fragment = (RetainFragment) fm.findFragmentByTag(TAG); 
    if (fragment == null) { 
     fragment = new RetainFragment(); 
     fm.beginTransaction().add(fragment, TAG).commit(); // add this 
    } 
    return fragment; 
} 
+0

似乎有點哈克..但這是'做過的事情'? –

+0

看看裝載機 - 應該解決問題,而不會看起來破爛 –

+0

@ThomasClowes你也可以把一個活動或其中的一部分變成一個片段,幷包含該片段的方式。因此,如果您的tabhost或viewpager當前由某個活動管理,請將該部分提取爲片段。片段可以包括其他片段 – zapl

0

使用IntentService從數據庫中獲取數據,並且不必擔心配置更改。發送Intent以獲取數據,使用LocalBroadcastManager將廣播Intent發送回您想要通知的任何其他組件。

+0

它的答案..它會工作,但對於AsyncTask是專爲我所要做的,而IntentService不是.. –