3

特定の行が削除されたときに依存コンポーネントに通知する方法を見つけようとしています。選択クエリを発行し、カーソルを取得してから削除を発行できますか、それとも元のカーソルを変更しますか? 全体的により良いアプローチはありますか?これは私が言及しているものです:

Cursor c = builder.query(db, projection, selection, selectionArgs, groupBy, having, sortOrder);
db.delete(table, selection, selectionArgs);
while (cursor != null && cursor.moveToNext()) {
    final String name = cursor.getString(0);
    // send notifications
}
c.close();
4

2 に答える 2

2

カーソルは、データベースから切り離されたデータ構造です。つまり、何らかの方法でデータベースを変更しても、既にフェッチされたカーソルには影響しません。

アップデート

これは間違っているようでした。.. ごめん!

詳細については、コメントを参照してください。@Selvinに感謝します。

于 2012-12-05T12:27:12.050 に答える
1

コンテンツ プロバイダーを使用してデータベースにアクセスする場合は、まさにこの目的のために設計されたContentObserversを使用できます。

コンテンツ プロバイダーを介してデータを取得する場合は、URI を使用します。この URI を使用して、カーソルが変更されたことを ContentObserver に通知できます。

getContentResolver ().notifyChange (URI, null)

詳細については、javadocs をnotifyChange(...)参照してください。

残念ながら、コンテンツ プロバイダーを使用してデータにアクセスしない場合は、独自のソリューションを作成する必要があります。

于 2012-12-03T22:50:25.747 に答える