簡體   English   中英

從活動中保留ASyncTask,而不是片段

[英]Retaining ASyncTask from activity, NOT fragment

所以..

我所擁有的如下,一個基於復雜片段的viewpager利用tabhosts等與我的活動。 這是基本設置。

一旦創建了這個,我就使用AsyncTask從我的數據庫中獲取一些數據。 當ASyncTask完成后,我使用fragmentmanager找到viewpager的相應片段,並在每個設置數據的片段中調用函數。 例如,在片段A中,數據被設置為列表適配器內的列表,而在片段B中,數據被繪制在地圖上。

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

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

我花了很多年的時間搜索,沒有人似乎對這種特殊情況有答案。

任何人都可以建議嗎?

您可以使用隱形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;
}

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

暫無
暫無

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

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