2

registerContentObserver の説明は次のとおりです。

abstract void registerContentObserver(ContentObserver オブザーバー)

このカーソルを支えるコンテンツに変更が発生したときに呼び出されるオブザーバーを登録します。

これが私のコードです:

Cursor cursor = (SQLiteCursor)dataBase.query(projection, null, null, null);
cursor .registerContentObserver(new ChangeObserver());

private class ChangeObserver extends ContentObserver {
    public ChangeObserver() {
        super(new Handler());
    }

    @Override
    public boolean deliverSelfNotifications() {
        return true;
    }

    @Override
    public void onChange(boolean selfChange) {
        Log.d(Constants.TAG, "ChangeObserver.onChange");
    }
}

ただし、データベースを変更すると (削除/更新/行を追加)、ContentObserver の onChange メソッドが呼び出されることはありません。ContentObserver をトリガーする状況を知りたいですか?

4

1 に答える 1

6

基本的に、この投稿で説明されているように、これはドキュメントの問題です。研究を行ってくれた @mikerowehl に敬意を表します。

つまり、主に ContentProviders/ContentResolvers で動作する Cursors の動作を説明するために書かれたドキュメントに要約されます。これらのクラスが関与しておらず、@Renard の提案どおりに操作されていない場合、ContentObserver はコールバックを取得しません。ドキュメントの内容にもかかわらず。

したがって、生の SQLiteCursor は、これらの凝った Cursor とは一種の「貧弱な関係」です... :)

于 2012-04-18T09:17:11.327 に答える