我想知道如何使用CursorLoader在屏幕上填充小部件。所有在线的例子都只适用于使用适配器,而且效果很好。我需要的是一种可靠的方法,可以从光标和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线程上填充小部件。但这很难看,因为光标中可能有很多值。我很想找到一个可靠的无碰撞的方法来处理这一切。

最佳答案

在询问了android devSimonVTreadme之后,我终于明白了这一点。
没有任何东西会声明onLoadFinished将在ui线程上被调用,因此在理论上,您应该像reto的书中建议的那样使用Handler。然而,当使用CursorLoader时(这是目前为止最常见的用例),您几乎可以保证onLoadFinished将在ui线程中被调用。

07-27 15:39