即使我调用 notifyChange(uri, null),列表视图也不会更新;虽然内容提供商



当新数据添加到内容提供程序时,我尝试刷新列表视图时遇到问题。

阅读有关此问题的类似帖子,我确保在我的插入方法上使用getContext().getContentResolver().notifyChange(uri, null); c.setNotificationUri(getContext().getContentResolver(), uri);我的查询方法(谈论内容提供程序类)。

我在活动中实现LoaderManager.LoaderCallbacks<Cursor>

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return new CursorLoader(ChatWindowActivity.this,
                                DatabaseContentProvider.getConversationUri(conversationId),
                                PROJECTION, null, null, null);
    }
    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        switch (loader.getId()) {
            case LOADER_ID:
                mAdapter.swapCursor(cursor);
                break;
            }
    }
    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        mAdapter.swapCursor(null);
    }
}

我正在使用一个自定义游标适配器,覆盖了getItemViewTypegetViewTypeCountnewViewbindView(类扩展CursorAdapter

在我的服务中,我调用service.getContentResolver().insert(...,values),但活动列表视图不会更新,除非我关闭并重新打开应用程序。

可能是什么原因造成的?

我已经设法解决了这个问题,但在这里发布以防将来对某人有所帮助。

问题出在getContext().getContentResolver().notifyChange(uri, null);.内容提供程序将通知仅在特定 URI 上发生更改。

所以我必须确保CursorLoader和插入调用在完全相同的 URI 上工作才能正常工作。即使是像"/contacts/1"到"/contacts"这样的微小差异也不会通知光标它已更改。

最新更新