0

私は国と国際機関のデータベースを持っています。各国は多数の組織のメンバーになることができ、各組織には少なくとも 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);
}

削除メソッドで。

4

0 に答える 0