2011-11-21 26 views
5

ちょっと、データベースに保存されているデモエントリのリストビューを使用しています。 EditText要素とEditTextの内容をデータベースに追加するボタンもあります。私はSimpleCursorAdapterを使用して移入機能次データベースの内容を視野にバインドするには:SimpleCursorAdapterを使用したAndroid ListViewのアップデート

private void populate() { 
    cursor = dbAdapter.getAllItems(); 
    startManagingCursor(cursor); 

    String[] from = new String[] { DBAdapter.KEY_TASK }; 
    int[] to = new int[] { android.R.id.text1 }; 

    // Now create an array adapter and set it to display using our row 
    cursorAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to); 
    list.setAdapter(cursorAdapter); 
} 

を私はリストビューをリフレッシュしたいが、これが唯一の移入機能と連携し、ボタンをクリックすることで、新しいエントリを追加した場合共通アダプター機能notifyDataSetChanged();では使用できません。バグがありますか?これはリストビューをリフレッシュする正しい方法ですか?

答えて

8

thisを見たことがありますか?swap cursorメソッドを試しましたか、単にsetAdapter()をもう一度呼び出すだけでしたか?

私はリストを更新することができなかった同様の問題がありました。私はrefreshListView()メソッドを作成しました。これを最初にonCreate()から呼び出すことができます。そして、ユーザが何かをDBに追加するときはいつでも。それは、リストビューをカーソルに再バインドすることだけです。すべての非推奨のメソッド(requery())、およびnotifyDataSetChanged()の問題で、私はこれが最も簡単な方法だと判断しました。

+0

ちょうど: 'requery()'は既に推奨されていません。 [Documentation](http://developer.android.com/reference/android/database/Cursor.html#requery())にはこれに関する明確な記録があります。 – 87element

+0

私は、文章を正しく言いませんでした、それを書き直しました:> – Jack

+0

あなたの返事のためにちょっとジャックありがとう、私は私がそれを私の 'populate()'関数私の 'onCreate()'メソッドと私は "追加"ボタンをクリックします。私は、これが、基本アダプタクラスの共通の 'notifyDataSetChanged()'メソッドを呼び出す代わりに、このメソッドを呼び出す良い解決策であるかどうかを知りたかっただけです。 –

2

私は新しいアダプタを割り当てた私は...ここ を間違いをした ...それは私がデータベースから新しい項目を追加した魅力スクロールで動的リストビューのための

Update SimpleCursorAdapter while maintaining scroll position in ListView

ように動作します...このリンクを参照してください同じsimplecursoradapterのたびに。 新しいアダプタを作成する代わりに。 ちょうどあなたは、アダプタ上のnotifyDataSetChanged()swapcursor()を呼び出す必要が

adapter.changecursor(newcursorValue); 
adapter.notifydatasetChanged(); 
lsMedicine1.setSelectionFromTop(lsMedicine1.getLastVisiblePosition()-20, 0); 
1

使用しています。

関連する問題