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/

相关文章:

java - ListView 中的复选框 onclick() 错误

javascript - 如何使用 Javascript 从 URL 获取响应

android - 使用 LoaderManager 和 CursorLoader 在 ListView 中显示专辑和艺术家

android - 使用 CursorLoader 查询 SQLite 数据库并填充 AutoCompleteTextView

java - CursorLoader - SQL 中的 order by 不区分大小写

android - 如何让我的 Android Activity 使用它的 xml 文件?

java - 如何识别随机ID并将其称为 child ?

javascript - 带有 PhoneGap 的 load() 函数的后退事件/按钮

android - 每次删除项目时,RecyclerView 最后一项都会闪烁

android - 如何使用 CursorAdapter 和 LoaderCallbacks 在 fragment 中实现 ContentObserver?