Populate widgets from a cursor in onLoadFinished()

 ̄綄美尐妖づ 提交于 2019-12-21 02:35:05

问题


I want to know how to use the CursorLoader to populate the widgets on a screen. All the examples online are only for using an adapter and this works great. What I need is a reliable way to update the views in my screen from a Cursor and on the UI thread and without sometimes crashing because of StaleDataException or the cursor being deactivated all of a sudden. Here is my current approach but I still receive some crash reports from users.

@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) {
    }

One solution would be to retrieve all the cursor fields directly inside onLoadFinished and pass them all to the handler to populate the widgets on the UI thread. But this is ugly because I may have a lot of values in the cursor. I would love to find a reliable crash-free way of dealing with all this.


回答1:


After asking on #android-dev SimonVT and readme helped me to get the bottom of this.

There is nothing that states that onLoadFinished will be called on the UI thread so in theory you should use a Handler like advised in Reto's book. However, when using a CursorLoader (which is by far the most common use case) you can pretty much guarantee that onLoadFinished will be called in the UI thread.



来源:https://stackoverflow.com/questions/10105885/populate-widgets-from-a-cursor-in-onloadfinished

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!