首页 > Android 如何同时使用不同类型的Loader加载数据?

Android 如何同时使用不同类型的Loader加载数据?

Loader类的返回结果类型由声明的泛型类型决定。

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    // Swap the new cursor in.  (The framework will take care of closing the
    // old cursor once we return.)
    mAdapter.swapCursor(data);
}

onLoadFinished(...) 中得到异步查询的结果。但是结果是Cursor类型。

请问我要怎么同时使用多个不同结果类型的Loader?
例如我自定义了网络查询的 AsyncTaskLoader, 返回的是服务器接口返回的JSON数据

public class NetworkLoader extends AsyncTaskLoader<String>{...}

于是在同一个Activity,我怎么同时使用 CursorLoader 查询联系人信息,又使用 NetworkLoader 向服务器查询信息?


需要几个 Loader 就通过LoaderManager初始化几个:

LoaderManager lm = getLoaderManager();
lm.initLoader(LOAD_CURSOR, args, new CursorLoaderCallbacks());
lm.initLoader(LOAD_NETWORK, args, new NetworkLoaderCallbacks());

然后实现相应的 Callbacks就可以啦:

private class CursorLoaderCallbacks implements LoaderCallbacks<Cursor> {
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return new CursorLoader(...);
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        // Do someting to update UI
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        // Do nothing
    }
}

private class NetworkLoaderCallbacks implements LoaderCallbacks<String> {
    @Override
    public Loader<String> onCreateLoader(int id, Bundle args) {
        return new NetworkLoader(...);
    }

    @Override
    public void onLoadFinished(Loader<String> loader, String string) {
        // Do someting to update UI
    }

    @Override
    public void onLoaderReset(Loader<String> loader) {
        // Do nothing
    }
}

你可以去github下一个四次元(原微次元) weiciyuan看看

【热门文章】
【热门文章】