0

私のアクティビティには次のコードがあります。

Cursor mCursor = managedQuery(ActivityColumns.CONTENT_URI, PROJECTION, null, null,
                getSortOrderStringFromSpinner());

        mCursor.registerContentObserver(new ContentObserver(new Handler())
        {
            @Override
            public void onChange(boolean selfChange)
            {
                ...snip...// breakpoint is set here                 
            }

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

...そして、データを取得するために使用しているDataProviderで、クエリメソッドの通知URIをクエリしているタイプのURIに設定しています。

c.setNotificationUri(getContext().getContentResolver(), uri);

最後に、更新、挿入、および削除で、操作が成功すると、サブスクライバーに通知されます。

getContext().getContentResolver().notifyChange(notificationUri, null);

上記の行のnotificationUriは、挿入/更新または削除されるアイテムのURIです。

コードの「...snip...」行にブレークポイントを設定して、いくつかのレコードを追加、削除、更新します。削除についてのみ通知され、更新や挿入については通知されません。私は何が間違っているのですか?

4

3 に答える 3

1

問題は私が思っていたとおりでした。更新されるはずのリストのアクティビティが一時停止されていたため、コンテンツオブザーバーは挿入または更新に関する更新を受信して​​いませんでした。アプリケーションにレコードを挿入または更新するには、ユーザーは別のアクティビティを起動してレコードを編集し、[送信]をクリックします。

次に、保存が実行されます

protected void onActivityResult (int requestCode, int resultCode, Intent data) 

私が知らなかったこと、そして私がドキュメントを読んだときに私が知ったのは、onActivityResultが次のとおりであるということです:

起動したアクティビティが終了すると呼び出され、開始したrequestCode、返されたresultCode、およびアクティビティからの追加データが提供されます。アクティビティが明示的にそれを返した場合、結果を返さなかった場合、または操作中にクラッシュした場合、resultCodeはRESULT_CANCELEDになります。

アクティビティが再開されるとき、onResume()の直前にこの呼び出しを受け取ります。

つまり、挿入と更新を実行したときにアクティビティがアクティブでなかったため、挿入または更新に関する通知が届きませんでした。

コンテキストメニューから[削除]を選択すると、アプリケーションがリストから項目を削除するため、削除は異なります。アクティビティは常にアクティブなままです。

于 2011-07-28T02:08:08.343 に答える
0

呼び出し

getContext().getContentResolver().notifyChange(notificationUri, null);

通知されたコンテンツ オブザーバーへの参照を含める必要があります。

getContext().getContentResolver().notifyChange(notificationUri, MyContentObserver);
于 2013-11-08T13:48:18.397 に答える
0

これにはまだもう少しテストが必要ですが、カーソルの更新が発生したときに、通知を受けていないコンテンツ オブザーバーのアクティビティが一時停止されたという問題があったようです。そして、一時停止されたアクティビティはイベントを受け取りません...私は思う...

于 2011-04-29T18:13:23.653 に答える