2012-03-23 10 views
1

を読んでいるものを信じることができません。ContentObserver - ちょうど私が読み、関連するQ & Aを読んで、私のカスタムのContentProviderは、このようなことをしなければと考えていないことができている私は

insertUri = ContentUris.withAppendedId(Data2TableMetaData.CONTENT_URI, rowId) 
// notify listeners 
getContext().getContentResolver().notifyChange(insertUri, null); 

... ContentObserversを行いますrowIdを取得する方法がありません。

これは本当に正しいですか?私は何かが欠けているに違いないと思う。これはちょっといいとは思わないから。

答えて

1

あなたは正しいです。コールバックインターフェースには変更内容に関する情報は含まれておらず、変更が行われただけです。しかし、一般的に、開発者はCursorLoadersのようなものを使用することをお勧めします。 http://developer.android.com/reference/android/content/CursorLoader.html

しかし、新しいAndroid 16 apiでは、OnChangeメソッドの行のURIを取得することができます。

+0

ありがとうございました。 CursorLoaderが私の質問にどのように対処しているのかわかりません(私もAndroid 3.0以前です)。私はまだ何かが欠けているに違いないと思う! throwされた場合、notifyChange URIにrowIdを追加する目的は何ですか?コンテンツプロバイダにとって私が見たコーディングパターンを理解したいだけです。 – Alex

+0

もしあなたがCursorLoaderを使うなら、行IDなどを心配する必要はありません。また、互換性パッケージを使用して、CursorLoaders pre Honeycombを使用することもできます。今すぐ元の質問に戻ってください:実際にあなたのURIに行idを追加する必要はありません。しかし、そうすることで、単一の要素だけを聞くコンテンツオブザーバを持つことが可能になります。そのような観察者は、あらかじめ明らかに聞いているIDを知る必要があります。 – Renard

+0

OK - しかし、ここでは私をぶつけている単純な状況です。私は、ユーザーが新しいオブジェクトを作成するいくつかのUIを持っています(新しい行に直接マップします)。私はまだ行IDを持っていません。コンテンツプロバイダーを介して新しい行を挿入します。私はuri(minus rowid)の更新を聞くUIアクティビティにコンテンツオブザーバを持っています。だから、私のUIが挿入のために送信した新しい行について聞きたがっているにもかかわらず、ベースuriに関連するすべての行へのすべての*更新は私のオブザーバーを起動させるようです。 UIが独自の挿入を聞くことができない場合、UIとdbの間のこのハンドシェイクがどのように機能すべきかはわかりません。 – Alex

0

apiレベル16では、ContentObserverはrowIdを持つuriを受け取ります。しかし、その前に、行を挿入していて、そのrowIdだけを聞きたい場合は、rowIdを知った後、挿入直後にContentResolver.registerContentObserverを呼び出すことができます。

+0

私はゼリービーンをチェックしましたが、まだ、それはURLにROWIDを与えていません。 – Jambaaz

関連する問題