android - 从 onLoadFinished() 中的游标填充小部件

标签 android android-cursorloader

我想知道如何使用 CursorLoader 来填充屏幕上的小部件。所有在线示例仅适用于使用适配器,效果很好。我需要的是一种可靠的方法来从 Cursor 和 UI 线程更新屏幕中的 View ,并且不会有时因为 StaleDataException 或光标突然停用而崩溃。这是我目前的方法,但我仍然收到一些来自用户的崩溃报告。

@Override
    public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
        CursorLoader loader = null;

        switch (id) {
            case LOADER_ID_DATA:
                loader = new CursorLoader(...);
                break;
        }

        return loader;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, final Cursor cursor) {
        handler.post(new Runnable() {

            @Override
            public void run() {
                if (getActivity() == null)
                    return;

                updateView(cursor);
            }
        });
    }

    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
    }

一种解决方案是直接在 onLoadFinished 中检索所有光标字段,并将它们全部传递给处理程序以填充 UI 线程上的小部件。但这很难看,因为我的游标中可能有很多值。我很想找到一种可靠的无崩溃方式来处理所有这些问题。

最佳答案

在询问 #android-dev SimonVTreadme 后,我帮助我弄清了真相。

没有任何内容表明 onLoadFinished 将在 UI 线程上调用,因此理论上您应该使用 Reto 书中建议的 Handler。但是,当使用 CursorLoader(这是迄今为止最常见的用例)时,您几乎可以保证 onLoadFinished 将在 UI 线程中调用。

关于android - 从 onLoadFinished() 中的游标填充小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10105885/

相关文章:

Android - 创建和管理 Activity

android - CursorLoader,获取本地数据库的 URI

Android:测试字符是否可显示/支持?

java - android服务在应用程序被杀死时自行重启

android - 带有 Assets 数据库的 CursorAdapter

Android 3.0 - 究竟使用 LoaderManager 实例有什么优势?

Android 浏览历史仅遗漏了一些网站

Android HoneyComb - 请求已经关闭的游标

javascript - 缺少脚本 : build - firebase deploy

android - 如何将项目从android studio迁移到android studio