7
私はAndroidアプリケーションで単純なリストを管理しようとしています。リストの内容はSQLiteデータベースで管理されます。ユーザーが特定の行を選択して保持すると、コンテキストメニューに「削除」オプションが表示されます。 「削除」を選択すると、その行はデータベースから削除されますが、ビューは更新されません。アプリケーションから戻ってきて、適切な行が削除されました。だから、私は行が削除されていることを知っている、それはちょうどリフレッシュしないListViewです。ここでデータベースの変更後にListViewを更新するにはどうすればよいですか?
はコードの関連ビットは、私が何をしないのです
switch(item.getItemId()) {
case 0:
SQLiteDatabase db = tasks.getWritableDatabase();
ListView lv = (ListView) findViewById(R.id.list);
SimpleCursorAdapter adapter = (SimpleCursorAdapter) lv.getAdapter();
db.delete(TABLE_NAME, "_ID=?", new String[] {adapter.getCursor().getString(0)});
adapter.notifyDataSetChanged(); // Not working, clears screen and doesn't reload
return true;
}
return super.onContextItemSelected(item);
... onContextItemSelected方法で
SQLiteDatabase db = tasks.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME,
new String[] { _ID, TITLE, DETAILS, },
null, null, null, null, TITLE + " DESC");
startManagingCursor(cursor);
ListView lv = (ListView) findViewById(R.id.list);
lv.setAdapter(new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
cursor,
new String[] {TITLE},
new int[] { android.R.id.text1}
));
... ...のonCreateメソッドで
です?
ありがとうございます!
ありがとうございます!私が参照したプロジェクトコードを見て、クラスでCursorを保存する必要があることを発見しました。私はそれをコピーして渡していると思うので、requery()メソッドは効果がありません。いったんクラスレベルの変数にすると、そのトリックが実行されました。 –