2011-01-09 4 views
0

ListActivityにはSimpleCursorAdapterを使用してデータベースコンテンツを表示しています。基になるデータベースが変更されたときにビューを更新するのに問題があります。Android:データベース全体を置換するときのカーソル再クエリー

実験として、アクティビティのonResume()Cursor.requery()への呼び出しをデバッグ用に追加しました。したがって、私がしなければならないことは、別のアクティビティに戻ってリフレッシュすることです。私はまた、デバッグのためにonContentChanged()をオーバーライドしました。 requery()が呼び出されていますが、これでonContentChanged()が呼び出されることはありません。

カーソルが古いキャッシュデータを使用していると思われます。変更を促す操作は、実際にはデータベース全体をワイプして置き換えることを伴う。単純に再クエリーするのではなく、カーソルを捨てて最初から再構築する必要があると思います。

Cursor.requery()と一緒に基になるデータベースを閉じて再オープンしようとしましたが、カーソルがデータベースのように足の下から引っ張られているように見えません。

編集:adapter.notifyDataSetChanged()requery()とをonResume()と一緒に呼び出してみましたが、違いはありません。

アドバイスはありますか?

答えて

1

カーソルを破棄し、データベースを閉じて再度開き、カーソルを再作成して解決します。 Observerを使用して、データベース変更のアクティビティを次のように通知します。

@Override 
public void update(Observable observable, Object data) { 
    // database changed 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      stopManagingCursor(cursor); 
      dbAdapter.close(); 
      dbAdapter.open(); 
      cursor = getAccounts(); 
      startManagingCursor(cursor); 
      adapter.changeCursor(cursor); 
     } 
    }); 
} 
0

あなたのListActivityのonResume()メソッド内からSimpleCursorAdapterでnotifyDataSetChanged()を呼び出そうとしましたか?

+0

はい、これも無効です。私は質問を更新します。 –

関連する問題