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

时间:2012-04-11 12:27:23

标签: android android-cursorloader

我想知道如何使用CursorLoader在屏幕上填充小部件。在线的所有示例仅用于使用适配器,这非常有用。我需要的是一种可靠的方法来更新我的屏幕中的视图,从Cursor和UI线程,有时没有崩溃,因为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线程上的窗口小部件。但这很难看,因为我可能在光标中有很多值。我很想找到一种可靠的无碰撞方式来处理这一切。

1 个答案:

答案 0 :(得分:7)

在询问#android-dev SimonVTreadme后,我帮助我了解了这一点。

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