0

所以..

我所拥有的如下,一个复杂的基于片段的查看器,它在我的活动中使用 tabhosts 等。这是基本设置。

创建完成后,我使用 AsyncTask 从我的数据库中获取一些数据。当 ASyncTask 完成时,我使用片段管理器找到 viewpager 的各个片段,并在每个片段中调用函数来设置数据。例如,在片段 A 中,数据被设置为列表适配器中的列表,而在片段 B 中,数据被绘制在地图上。

我已经这样设置了,因为所有片段都使用相同的数据,我只想调用一个 ASyncTask。它完美地工作。

我的问题是当用户在加载时旋转屏幕。因此,从片段中调用 ASyncTask 可以使用 setRetainInstance,之前在活动中可以使用 onRetainNoneConfigurationInstance.. 但现在已弃用。

我花了很长时间搜索,似乎没有人对这种特定情况有答案。

任何人都可以建议吗?

4

2 回答 2

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;
}
于 2012-12-20T17:46:05.080 回答
0

使用 IntentService 从数据库中获取数据,您不必担心配置更改。发送 Intent 以获取数据,使用 LocalBroadcastManager 将广播 Intent 发送回您要通知的任何其他组件。

于 2012-12-20T18:53:35.497 回答