即使特定查询与更新不匹配,也会调用LoaderManager.onLoadFinished

时间:2013-03-15 18:22:26

标签: android android-contentprovider android-loadermanager

我有一个Android应用,它有一个我经常更新的内容提供商。要加载所述数据的列表,我使用的是LoaderManager。

在详细页面上,我也使用了LoaderManager,但我创建了CursorLoader,如下所示:

return new CursorLoader(getActivity(), DataProvider.POST_URI, projection, "_id = ?", new String[]{String.valueOf(post_id)}, null);

如您所见,我只从表中获得一个项目。更新行时,onLoadFinished回调会更新,但是,当其他行添加/修改到表时。它不会有太多的麻烦,但有时候,它会导致整个列表变得空白并重新绘制,这对于用户多次发生时可能会令人沮丧。

你知道我怎么能避免这种行为?

1 个答案:

答案 0 :(得分:3)

重新加载正在进行,因为您正在将此游标加载器与DataProvider.POST_URI关联,我假设它是您用于posts表的那个。只要此表中的任何元素发生更改,将通知具有Uri的所有游标。如果要接收单个项目的通知,则应实施新的Uri方案以仅匹配该项目。有关示例,请查看UriMatcher类的文档。您应该执行与PEOPLEPEOPLE_ID个案类似的操作。

修改

您可以在ContentProvider here找到一个很好的教程。特殊的9.4节应该有助于正确实现ContentProvider