私はListActivityにListViewを持っていますが、それはいくつかのデータにバインドされています。私はデータを提供しているコンテンツプロバイダを持っています。Android ListViewライブアップデート
ListActivityは、コンテンツリゾルバを照会することによってデータを取得します。
Uri uri = Uri.parse("content://my.provider.DocumentProvider/mystuff");
contentCursor = this.getContentResolver().query(uri, null, null, null, null);
だから今の活動は、カーソルを持っています。アダプタを作成してリストに追加します。
ListAdapter adapter = new DocumentListCursorAdapter(this, R.layout.main_row_layout, contentCursor, new String[] { "titleColumn" }, new int[] { titleColumnIndex });
setListAdapter(adapter);
これは問題なく動作します。リストにはカーソル内のデータが表示されます。
しかし、コンテンツプロバイダに新しいデータが追加されました。リストを更新して新しいデータを表示したい。
私が見た例では、アダプタのnotifyDataSetChangedの呼び出しが含まれていますが、コンテンツプロバイダーとコンテンツを消費しているリストの間の分離が解消されているようです。
コンテンツプロバイダは、それが彼らのnotifyDataSetChangedメソッドを呼び出すことができますので、カーソルに添付されているものをアダプタに知っておく必要がありますか?あるいは、このように結合されたこれらの2つのものが見えないよりよい方法があります。
http://developer.android.com/reference/android/content/ContentResolver.html#notifyChange%28android.net.Uri,%20android.database.ContentObserver,%20boolean%29を見ましたか? – Luksprog
私はregisterContentObserverで登録しようとしましたが、カーソルが変更されたときに変更が反映されるのを見ませんでした。それはうまくいくはずですか? – stevex
slukianと同じですが、 'contentCursor.setNotificationUri(cr、uri);' – njzk2