問題だったのは、ListViewのアイテムをクリックした時にSQLiteの該当データを削除する機能を実装していたんだけど、押しても即座に更新されなくてどーすんのかなーっと思って調べた。
よくあるのは
- mAdapter.notifyDataSetChanged();
SimpleCursorAdapterのListView更新について
とかも試したけど、Cursor#requery()ってのがUIスレッドでの更新処理なので使うなって怒られたので、これもちがうなーと。
で、さらに調べてたら次の記事を見つけた。
CursorAdapterとContentProviderの関係
どうやら正しいContentProviderを作ってないとSimpleCursorAdapterが変更を検知できないらしい。
で、自分の作ったContentProvider見てみると、ContentProvider#query()で次のコードが抜けてた。
- cursor.setNotificationUri(getContext().getContentResolver(), uri);
作るときに参考にしたサンプルにはちゃんと書かれていたので普通に自分のミスでした。
で、修正すると、即座に更新されるようになった。
他にもありそうなのはContentProvider#insert()とかで
- getContext().getContentResolver().notifyChange(uri, null);
0 件のコメント:
コメントを投稿