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

标签 android android-cursorloader

我想知道如何使用 CursorLoader 在屏幕上填充小部件。所有在线示例仅用于使用适配器,并且效果很好。我需要的是一种可靠的方法来从光标和 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(这是迄今为止最常见的用例)时,您几乎可以保证在 UI 线程中调用 onLoadFinished

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

相关文章:

android - 设备摄像头方向,不包括设备横向/纵向方向

android - 无法从 SQLiteCursorLoader 转换为 Loader<Cursor>

Android - CursorAdapter 不起作用

android - 使用 Dagger2 将适配器注入(inject) fragment

android - 如何倾斜 map View ?

android - 选择textview时如何显示弹出窗口而不是CAB?

android - 如何使用CursorLoader填充微调器?

android - fragment ,ContentProvider和方向更改的光标

android - 如何关闭Android中ContentProvider中使用的数据库

java - 如何将模块安装为服务 - Android