当新数据添加到内容提供商时,我无法尝试让我的ListView刷新。
在这个问题上阅读类似的帖子,我确保在我的插入方法上使用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)
,但活动ListView不会更新,除非我关闭并重新打开该应用。
导致这种情况的原因是什么?
答案 0 :(得分:0)
我设法解决了这个问题,但是发布在这里,以防将来有人帮助。
问题在于getContext().getContentResolver().notifyChange(uri, null);
。内容提供商将通知仅在特定 URI上发生更改。
所以我必须确保CursorLoader
和插入调用在完全相同的URI上工作。即使像'/contacts/1
'到'/contacts
'这样的小差异也不会通知游标它已更改。