2011-07-10 15 views
0

私はちょうどAndroid開発から始めて、ListActivitySQLiteDatabase、およびSimpleCursorAdapterを使用する単純なアプリを構築しています。データが変更されるたびに新しいSimpleCursorAdapter?

Androidデベロッパーのウェブサイトには、SimpleCursorAdadpterの使い方を示すサンプルプロジェクトがあります。基礎となるデータベースは、一部のユーザーアクションの結果として変更されるたびに、実装を見ると、ListActivityは、明示的にリストを「リフレッシュ」するには、以下の関数を呼び出します。

private void fillData() { 
    // Get all of the rows from the database and create the item list 
    mNotesCursor = mDbHelper.fetchAllNotes(); 
    startManagingCursor(mNotesCursor); 

    // Create an array to specify the fields we want to display in the list (only TITLE) 
    String[] from = new String[]{NotesDbAdapter.KEY_TITLE}; 

    // and an array of the fields we want to bind those fields to (in this case just text1) 
    int[] to = new int[]{R.id.text1}; 

    // Now create a simple cursor adapter and set it to display 
    SimpleCursorAdapter notes = 
     new SimpleCursorAdapter(this, R.layout.notes_row, mNotesCursor, from, to); 
    setListAdapter(notes); 
} 

それはたびに作成された新しいSimpleCursorAdapterように見えますビューにはsetListAdapter()でバインドされています。これは最高の/最もクリーンな実装ですか? Androidウェブサイトにあるという事実は、私がCursorAdapterのドキュメントを見て、changeCursor()メソッドが上記のものよりもクリーンな実装に役立つように見えたが、私はそうではないそのように見えるかもしれません。

たぶん私は何も気にしませんが、C/C++の世界から来て、データベースから行を挿入/削除するたびに作成されたこの新しいオブジェクトが少し重いようです。

+0

SimpleCursorAdapterは常に1回だけ作成する必要があります。完全に新しいアダプタを作成するのではなく、基になるデータベースに変更があるたびにアダプタを作成する必要はありません。changeCursor()またはrequery()オプション。私はまた彼らがなぜそのようにしたのか不思議です。 – Gopal

答えて

0

はい、あなたは正しいです。あなたは何度もそれを見ることができます。リストが常にonResumeで作成されるときに問題を生じない小さなリストの場合。しかし、それは良いスタイルではありません。 cursor.changeCursor()またはadapter.notifyDataSetChanged()を使用できます。

+0

'SimpleCursorAdapter'インスタンスが' ListActivity'クラスのメンバになり、 'onCreate()'メソッドでインスタンス化されて(ヌルカーソルで)取得されるように、コードをリファクタリングすることに決めました。その後、データセットが変更されるたびに(またはリストを一杯にする必要があるとき)、私のすべてのユーティリティ関数はデータベースを再クエリし、新しい 'Cursor'インスタンスを返します。次に、アクティビティで 'startManagingCursor()'メソッドを呼び出し、アダプタで 'changeCursor()'メソッドを呼び出して、新しく作成されたカーソルオブジェクトを渡します。 –

関連する問題