Android 装载机&x27;在重新创建视图之前,不会调用相邻页面上的s onLoadFinished()

Android 装载机&x27;在重新创建视图之前,不会调用相邻页面上的s onLoadFinished(),android,android-viewpager,asynctaskloader,Android,Android Viewpager,Asynctaskloader,我很难正确实现加载程序。我读了很多文章和帖子,尝试了很多东西。但这一问题尚未得到解决。我正在使用带有PagerSlidingTabStrip库的viewpager创建一个3选项卡布局(使用FragmentPagerAdapter)。我使用3个单独的加载程序加载这3个选项卡的数据 问题是,当我第一次加载我的应用程序时,相邻的选项卡不会调用loadInBackground(),直到我滚动到这些选项卡,即使FragmentPagerAdapter成功创建了相邻的片段。奇怪的是,当我旋转或按home键并

我很难正确实现加载程序。我读了很多文章和帖子,尝试了很多东西。但这一问题尚未得到解决。我正在使用带有PagerSlidingTabStrip库的viewpager创建一个3选项卡布局(使用FragmentPagerAdapter)。我使用3个单独的加载程序加载这3个选项卡的数据

问题是,当我第一次加载我的应用程序时,相邻的选项卡不会调用loadInBackground(),直到我滚动到这些选项卡,即使FragmentPagerAdapter成功创建了相邻的片段。奇怪的是,当我旋转或按home键并再次打开应用程序时,相邻的选项卡开始加载。这意味着,如果视图被销毁并重新创建,则开始加载

我还尝试在所有3个片段中对加载程序使用startLoading(我相信我的OnStartLoading方法配置正确,我在该方法中调用forceLoad()。如果使用startLoading,则调用loadInBackground()。然而,onLoadFinished()不是!所以我的视图仍然显示一个空的旋转加载程序,直到我移动到相邻的选项卡

因此,简而言之,无论是否调用loadInBackground(),在重新创建视图之前都不会调用相邻页面的onLoadFinished()。(当然,如果我只是转到那些页面)

有人遇到过类似的问题吗?我觉得我已经尽了我所能,却不知道如何处理这个问题

这是我的onCreateView():

我的抽象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);
}
我的简历()


我能看看你的残片PageRadapter吗?@wangqi060934对不起,我不久前就放弃了这个项目。感谢您的回复..->这个解决方案有效
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);
}
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());
    }
}