Android 如何同时使用不同类型的Loader加载数据?
高洛峰
高洛峰 2017-04-17 15:04:27
[Android讨论组]

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 向服务器查询信息?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
大家讲道理

需要几个 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
    }
}
PHPz

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号