0

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

我认为随着 ContentProvider 携带和 CursorLoader 获取每个数据库更新、删除和插入,我在第一个 Activity 上的列表视图应该显示没有删除行的新列表。但它仍然在这里。

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

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

也许我应该使用

loaderManager.restartLoader(LOADER_ID, null, mCallbacks);

? 在 onRestart() 中,但为什么呢?

4

2 回答 2

1

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

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

getContentResolver().notifyChange(MY_URI, null);

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

于 2013-10-05T11:44:36.380 回答
0

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

getLoaderManager().restartLoader(0, null, this);
于 2016-03-02T12:54:35.927 回答