ContentProvider和Listview - 内容更改后数据未更新

时间:2013-08-17 23:50:45

标签: android listview android-contentprovider android-cursorloader

我在第一个Activity上有一个listview(使用自定义CursorAdapter,CursorLoader和ContentProvider),当用户点击列表行时,它会打开另一个第二个Activity,用户可以在其中删除此项目。当他选择DELETE时,删除数据库中的表(使用ContentProvider)和第二个Activity()。但第一活动仍显示旧内容。

我认为,当ContentProvider携带并且CursorLoader获取每个数据库更新,删除和插入时,我的listview上的第一个Activity应显示没有该删除行的新列表。但它仍在这里。

之前,我通过requery()方法或其他传递给onRestart()的CursorAdapter和ListView的方法来更改数据。

我很困惑我应该做什么来在第一个活动的ListView中显示之后的实际数据 删除?

可能是我应该使用

loaderManager.restartLoader(LOADER_ID, null, mCallbacks);

?在onRestart(),但为什么?

2 个答案:

答案 0 :(得分:1)

当基础数据发生变化时,ContentProvider提供给ListView的数据不会自动更新。您需要通知应用程序范围的ContentResolver您已注册的contentProviders的数据已更改。

您可以通过ContentResolver向相关ContentProvider的相应URI发送通知来执行此操作。代码行如下所示:

getContentResolver().notifyChange(MY_URI, null);

删除发生后,您可以将其添加到第二个活动中。显然,您需要将MY_URI更新为适合您内容提供商的URI。如果您已正确实施LoaderManager,您将看到使用新数据刷新ListView数据。

答案 1 :(得分:0)

我在类似的情况下使用了这个:

getLoaderManager().restartLoader(0, null, this);