当新数据添加到内容提供程序时,我尝试刷新列表视图时遇到问题。
阅读有关此问题的类似帖子,我确保在我的插入方法上使用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);
}
}
我正在使用一个自定义游标适配器,覆盖了getItemViewType
、getViewTypeCount
、newView
和bindView
(类扩展CursorAdapter
)
在我的服务中,我调用service.getContentResolver().insert(...,values)
,但活动列表视图不会更新,除非我关闭并重新打开应用程序。
可能是什么原因造成的?
我已经设法解决了这个问题,但在这里发布以防将来对某人有所帮助。
问题出在getContext().getContentResolver().notifyChange(uri, null);
.内容提供程序将通知仅在特定 URI 上发生更改。
所以我必须确保CursorLoader
和插入调用在完全相同的 URI 上工作才能正常工作。即使是像"/contacts/1
"到"/contacts
"这样的微小差异也不会通知光标它已更改。