在重新创建视图之前,未调用的相邻页面上的Loader的onLoadFinished()

时间:2014-05-04 23:10:19

标签: android android-viewpager asynctaskloader

我无法正确实施装载机。我阅读了很多文章和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());
    }
}

0 个答案:

没有答案