多次调用restartLoader()会导致单次调用onLoadFinished()?

时间:2016-06-06 08:09:59

标签: android cursor loader android-cursorloader

我多次拨打restartLoader()并在我的onCreateLoader()中将最后Loader<Cursor>保存到全局变量,以便仅处理onLoadFinished()中的最后一个。但是,对于onCreateLoader()的n次调用,始终只有一个onLoadFinished()调用。

为什么?如果有另一个加载程序出现,经理是否会抛弃实际处理过的加载程序?

实际处理哪一个?第一个,最后一个或最快/最慢的一个?

我需要这个的原因是因为onLoadFinished()我检查了

if (loader == mMySavedLoaderFromLoaderCreated) {
    // do stuff, update adapter etc
} else if (loader == mAnotherLoader) { // I have multiple loaders
    // do stuff
}

有时在更改方向后,它不会通过我的支票。

修改

  1. 首先restartLoader()创建一个ID正确的新加载器(100)

  2. 然后我旋转屏幕,id为100的装载机就可以了

  3. 在此之后,我致电restartLoader() - &gt; onCreateLoader()知道id 100,但会创建一个 id = 0 的加载程序。

  4. onLoadFinished(Loader<Cursor> loader,...)来自参数的加载器是id为100的旧加载器,而不是新创建的加载器。

  5. EDIT2:

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        if (id == LOADER_PRODUCT) {
            /* creating query */
    
            mProductLoader = new CursorLoader(
                    getActivity(),
                    ContentProvider.getUri(Product.class, null),
                    null,
                    query.toString(),
                    queryArgs,
                    null
            );
    
            return mProductLoader;
        } else if (id == LOADER_STATUS) {
            mStatusLoader = new CursorLoader(
                    getActivity(),
                    ContentProvider.getUri(Status.class, null),
                    null,
                    null,
                    null,
                    null
            );
            return mStatusLoader;
        }
        return null;
    }
    
    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        if (loader == mProductLoader) {
            mProductCursor = data;
            mAdapter.swapCursor(mProductCursor);
            mAdapter.setSearchQuery(mSearchQuery);
        } else if (loader == mStatusLoader) {
    
        }
    }
    

0 个答案:

没有答案