Programming Memo

Androidを中心としたJavaプログラミングを通して学んだことなどの覚書(にする予定)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

SimpleCursorAdapterのListView更新について

前回記事の方法でSimpleCursorAdapterを用いてListViewを表示させたアクティビティクラスから、インテントによって別クラスでリスト要素のINSERT、UPDATEをやらせてから、再度上記アクティビティクラスに戻ってくると・・・

リスト表示が更新されない。。

で、色々調べてみて、まず試してみたのが以下のようにAdapterにデータの変化を通知する方法(onActivityResultメソッドでインテント先のクラスから処理が戻ってきたときに実行)。
	protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
		super.onActivityResult(requestCode, resultCode, intent);
		if (resultCode == RESULT_OK) {
			mAdapter.notifyDataSetChanged();
		}
	}
しかし、こいつを実装してもデータは更新されない。で、よくよく調べてみると、どうもこの方法が有効なのはArrayAdapterだけらしい。
[android] SimpleCursorAdapter 使用時の ListView の更新方法の1つ

次に、上記リンク先記事でも紹介されているCursor.requery()を試す。
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
		super.onActivityResult(requestCode, resultCode, intent);
		if (resultCode == RESULT_OK) {
			mCursor.requery();
		}
	}
これだと確かにリスト要素の更新(UPDATE)は反映された。・・・が、追加(INSERT)が反映されなくて、しばし途方にくれる。

少し考えてからもうひとつの方法(というか以前はこれをずっと使っていたのだがすっかり忘れていた)を思い出す。DBからカーソル取得した後にこいつを唱えるだけ。
startManaging(mCursor)
無事、UPDATEもINSERTも即表示に反映された。とりあえずカーソル使うときはstartManaging(Cursor)を唱えておこう。

追記:
startManaging(Cursor)だけでうまくいく♪ と喜んでいたのもつかの間。リスト要素をDELETEした場合には表示が反映されない(削除行が残ってしまう)ことが判明・・・。
ただ、これについては、Cursor.requery()すれば表示に反映されることを確認。

というわけで、startManaging(Cursor)とCursor.requery()の組み合わせでINSERT、UPDATE、DELETEすべてに対応可能ということで一件落着。

スポンサーサイト
  1. 2011/03/12(土) 09:15:34|
  2. Android
  3. | トラックバック:0
  4. | コメント:0
<<ListActivityの利点 | ホーム | AndroidのSQLiteは追記型ではない??>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://tmken2.blog95.fc2.com/tb.php/19-93a112b1
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

TMken2

Author:TMken2
FC2ブログへようこそ!

最新記事

月別アーカイブ

カテゴリ

未分類 (0)
Eclipse (2)
Syntax Highlighter (2)
アルゴリズム (1)
Java (2)
Android (20)
覚書 (1)
SQLite (2)

アクセスカウンタ

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。