我在片段中有一个装载器,基本上是"计数"数据库中的行,使用由sqlite数据库支持的内容提供程序。我还有一个后台线程在数据库中添加/删除行。该服务从与我的片段所附加的活动相同的活动开始。
我看到的行为如下:
getContext().getContentResolver().notifyChange(uri, null);
来通知更改(这由日志声明验证)getLoaderManager().getLoader(LOADER_ID).forceLoad()
)以下是我如何在单独的服务中更新内容:
// inserting values...
final ContentValues cv = generateContentValues();
getContentResolver().insert(ItemEntry.CONTENT_URI, cv);
// and elsewhere in the code, deleting values...
getContentResolver().delete(ItemEntry.buildItemUri(id), null, null);
我在这里创建加载器:
public static String[] ITEM_COLUMNS = new String[] { ItemEntry._ID };
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Log.d(TAG, "onCreateLoader called");
Toast.makeText(getActivity(), "onCreateLoader", Toast.LENGTH_LONG).show();
return new CursorLoader(getActivity(),
ItemEntry.CONTENT_URI,
ITEM_COLUMNS,
null,
null,
null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
Toast.makeText(getActivity(), "found " + data.getCount() + " items", Toast.LENGTH_LONG).show();
processDataCount(data.getCount());
}
我尝试使用null
作为投影创建加载程序,它应返回所有列,但没有区别。基本上,我看到数据更改的唯一方法是在加载器上调用forceLoad()
时。
有什么想法吗?我甚至不知道从哪里开始。提前谢谢!
答案 0 :(得分:0)
ARRGH,它总是很简单!
我在数据提供商的setNotificationUri
返回光标时忘了query
:
retCursor.setNotificationUri(getContext().getContentResolver(), uri);
return retCursor;
小心地复制/粘贴,伙计们!