【问题标题】:how to preventing the cursorLoader calling into the onLoadFinished if the data it is monitoring changes如果它正在监视的数据发生变化,如何防止 cursorLoader 调用到 onLoadFinished
【发布时间】:2015-05-21 17:55:42
【问题描述】:

有如下片段,在正常流程中,onCreateLoader 和 onLoadFinished 是成对调用的。 但是当数据源(数据库)内容发生变化时,由于加载器正在监视数据变化,加载器将再次调用 onLoadFinished() 并在光标中填充新数据。 但在我的情况下,它不想更改当前使用的游标,因此不希望加载器将更新后的游标传递给另一个 onLoadFinished 调用,或禁用加载器的监控部分。

有办法吗?

AFragment extends Fragment implements LoaderCallbacks<Cursor> {

    protected void startSupportLoaderManager() {
        getActivity().getSupportLoaderManager()
          .initLoader(LOADER_ID, null, this);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {

        return createLoader(getActivity(), id, args, null);
    }
    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
        if (mAdapter != null) {
            mAdapter.resetCursor();
        }
    }
    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        ...
    }
}

编辑: 有点知道这可能会奏效,但仍感觉缺少一些要点。这是什么想法: 在ContentProvider的实现中,对于insert()、update()、delete()我们做了

getContext().getContentResolver().notifyChange(uri, null);

在 CursorLoader 中它做了 cursor.registerContentObserver(mObserver);在

public Cursor loadInBackground() {
    Cursor cursor = getContext().getContentResolver().query(mUri, mProjection, mSelection,
            mSelectionArgs, mSortOrder);
    if (cursor != null) {
        // Ensure the cursor window is filled
        cursor.getCount();
        cursor.registerContentObserver(mObserver);
    }
    return cursor;
}

所以它以某种方式监控 Uri 数据源的变化,就像我们在游标上所做的一样 cursor.setNotificationUri(getContext().getContentResolver(), uri);

因此,如果我们可以提供一个 Uri,它可以用于插入/更新/删除,但与我们提供给加载器的 Uri 不同,它仍然会执行惰性/更新/删除操作,但加载器不会由于 Uri 不同而通知。 所以基本上,加载器将使用与其他数据操作使用的 Uri 不同的 Uri。

不确定是否了解加载程序对内容 Uri 的监控是否正确。也许有更好的方法来做到这一点? 任何建议表示赞赏。

【问题讨论】:

标签: android monitoring android-cursorloader


【解决方案1】:

如果要停止加载器,可以使用:

getLoaderManager().destroyLoader(LOADER_ID);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多