所以..
我所拥有的内容如下,一个复杂的基于片段的viewpager利用tabhosts等与我的活动。这是基本设置。
创建完成后,我使用AsyncTask从我的数据库中获取一些数据。当ASyncTask完成后,我使用fragmentmanager找到viewpager的相应片段,并在每个设置数据的片段中调用函数。例如,在片段A中,数据被设置为列表适配器中的列表,而在片段B中,数据被绘制在地图上。
我已经这样设置了,因为所有片段都使用相同的数据,我只想调用一个ASyncTask。它运作得很好。
我的问题是当用户在加载时旋转屏幕。所以从一个片段调用ASyncTask你可以使用setRetainInstance,之前在一个活动中你可以使用onRetainNoneConfigurationInstance ..但是现在已经弃用了。
我花了很多年的时间搜索,没有人似乎对这种特殊情况有答案。
有人可以提供建议吗?
答案 0 :(得分: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;
}
答案 1 :(得分:0)
使用IntentService从数据库中获取数据,您不必担心配置更改。发送Intent以获取数据,使用LocalBroadcastManager将广播Intent发送回您要通知的任何其他组件。