我无法正确实施装载机。我阅读了很多文章和stackoverflow帖子,并尝试了各种各样的东西。但还没有解决这个问题。我正在使用带有PagerSlidingTabStrip库的viewpager创建一个3选项卡布局(使用FragmentPagerAdapter)。我正在使用3个独立的加载器来加载这3个选项卡的数据。
问题在于,当我第一次加载应用程序时,相邻选项卡不会调用loadInBackground(),直到我滚动到这些选项卡,即使FragmentPagerAdapter成功创建了相邻的片段。奇怪的是,一旦我旋转或按下主页并再次打开应用程序,相邻的选项卡开始加载。这意味着如果视图被破坏并重新创建,则加载开始。
我也尝试在所有3个片段中使用startLoading作为加载器(我相信我的OnStartLoading方法已正确配置。我在该方法中调用forceLoad())。如果我使用startLoading,则调用loadInBackground()。然而,onLoadFinished()不是!所以我的视图仍然显示一个空的旋转装载机,直到我移动到相邻的标签。
因此,简而言之,无论是否调用loadInBackground(),都不会调用相邻页面的onLoadFinished(),直到重新创建视图为止。 (当然,如果我只是转到那些页面)
有人遇到过类似的问题吗?我觉得我已尽力而为,并且不知道如何处理这个问题。
这是我的onCreateView():
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.movie_grid, container, false);
LoaderManager lm = getLoaderManager();
lm.restartLoader(CONFIG_LOADER, null, new ConfigurationLoaderCallbacks());
lm.restartLoader(MOVIE_DATA_LOADER, null, new MovieDataLoaderCallbacks());
...
return v;
}
我的抽象AsyncTaskLoader类:
private D mData;
public DataLoader(Context context) {
super(context);
}
@Override
protected void onStartLoading() {
if (mData != null) {
deliverResult(mData);
} else {
forceLoad();
}
}
@Override
public void deliverResult(D data) {
mData = data;
if (isStarted())
super.deliverResult(data);
}
我的onResume():
public void onResume() {
super.onResume();
// Call this to re-connect with an existing loader
LoaderManager lm = getLoaderManager();
if (lm.getLoader(MOVIE_DATA_LOADER) != null) {
lm.initLoader(MOVIE_DATA_LOADER, null, new MovieDataLoaderCallbacks());
}
if (lm.getLoader(CONFIG_LOADER) != null) {
lm.initLoader(CONFIG_LOADER, null, new ConfigurationLoaderCallbacks());
}
}