即使我调用 notifyChange(uri, null); ListView 也不会更新;通过内容提供者
ListView won't update even if I call notifyChange(uri, null); though content provider
当新数据添加到内容提供程序时,我无法尝试刷新我的 ListView。
阅读关于这个问题的类似帖子,我确保在我的插入方法上使用 getContext().getContentResolver().notifyChange(uri, null);
并且
c.setNotificationUri(getContext().getContentResolver(), uri);
关于我的查询方式(说到内容提供者class)。
我在 activity:
中实现了 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
(class 扩展 CursorAdapter
)
在我的服务中我调用 service.getContentResolver().insert(...,values)
,但是 activity ListView 不会更新,除非我关闭并重新打开应用程序。
可能是什么原因造成的?
我已经设法解决了这个问题,但在此发帖以防将来对某人有所帮助。
问题出在 getContext().getContentResolver().notifyChange(uri, null);
。内容提供商将通知仅 specific URI 发生了更改。
所以我必须确保 CursorLoader
和插入调用在完全相同的 URI 上工作,这样才能工作。即使像“/contacts/1
”与“/contacts
”这样的微小差异也不会通知游标它已更改。
当新数据添加到内容提供程序时,我无法尝试刷新我的 ListView。
阅读关于这个问题的类似帖子,我确保在我的插入方法上使用 getContext().getContentResolver().notifyChange(uri, null);
并且
c.setNotificationUri(getContext().getContentResolver(), uri);
关于我的查询方式(说到内容提供者class)。
我在 activity:
中实现了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
(class 扩展 CursorAdapter
)
在我的服务中我调用 service.getContentResolver().insert(...,values)
,但是 activity ListView 不会更新,除非我关闭并重新打开应用程序。
可能是什么原因造成的?
我已经设法解决了这个问题,但在此发帖以防将来对某人有所帮助。
问题出在 getContext().getContentResolver().notifyChange(uri, null);
。内容提供商将通知仅 specific URI 发生了更改。
所以我必须确保 CursorLoader
和插入调用在完全相同的 URI 上工作,这样才能工作。即使像“/contacts/1
”与“/contacts
”这样的微小差异也不会通知游标它已更改。