我有一个国家和国际组织的数据库。每个国家都可以是多个组织的成员,每个组织至少有一个成员(换句话说,多对多)。我使用著名的LoaderManager 框架进行显示。但是在我删除一个项目(一些项目)后,所有片段都显示了已删除的项目。我试图从课堂上使用这个解决方案onContextItemSelected
,MyFragment extends SherlockListFragment
但什么也没发生。
解决了。
试图找出原因,我玩得很开心。我终于找到了。如果我使用 URIUris.MY_URI
作为CursorLoader 构造函数的参数,我将不得不在删除时使用相同的 URI。我确信有一个更优雅的解决方案,但这个可行。而且我什至不需要调用restartLoader 方法。
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle loaderExtras) {
// Some code
return new CursorLoader(getActivity(), Uris.MY_URI, mProjection, selection, selectionArgs, sortOrder);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
String selection = Columns._ID + "=?";
String selectionArgs[] = new String[] {
Long.toString(id)
};
long rows = getActivity().getContentResolver().delete(Uris.MY_URI, selection, selectionArgs);
super.onListItemClick(l, v, position, id);
}
在查询方法cursor.setNotificationUri(getContext().getContentResolver(), uri);
中返回游标之前不要忘记关于
if (result > 0) {
// result is the number of deleted items
getContext().getContentResolver().notifyChange(uri, null);
}
在删除方法中。