即使我调用notifyChange(uri,null),ListView也不会更新;虽然内容提供商
我在尝试让新的数据添加到内容提供商时刷新ListView以进行刷新时遇到了问题。即使我调用notifyChange(uri,null),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不会更新,除非我关闭并重新打开应用程序。
这可能是什么原因造成的?
回答:
我已经设法解决这个问题,但在这里发帖以防万一以后帮助别人。
问题出在getContext().getContentResolver().notifyChange(uri, null);
。内容提供商将仅通知在特定的 URI上发生的更改。
所以我必须确保CursorLoader
和插入调用完全相同的URI工作。即使像'/contacts/1
'到'/contacts
'这样的小差别也不会通知游标被改变。
以上是 即使我调用notifyChange(uri,null),ListView也不会更新;虽然内容提供商 的全部内容, 来源链接: utcz.com/qa/264495.html