私は国と国際機関のデータベースを持っています。各国は多数の組織のメンバーになることができ、各組織には少なくとも 1 人のメンバーがいます (つまり、多対多)。よく知られたLoaderManager フレームワークを表示に使用します。しかし、アイテム (いくつかのアイテム) を削除した後、すべてのフラグメントに削除されたアイテムが表示されます。クラスからこのソリューションonContextItemSelected
を使用しようとしましMyFragment extends SherlockListFragment
たが、何も起こりませんでした。
解決しました。
原因を探るのがとても楽しかったです。やっと見つけました。CursorLoader コンストラクターUris.MY_URI
のパラメーターとしてURIを使用すると、削除時に同じ 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);
}
query メソッドで cursor.setNotificationUri(getContext().getContentResolver(), uri);
カーソルを返す前に忘れないでください。
if (result > 0) {
// result is the number of deleted items
getContext().getContentResolver().notifyChange(uri, null);
}
削除メソッドで。