使用游标和SimpleCursorAdapter更新ListView

com*_*lez 2 sqlite android listview cursor

我的光标是从sqlite获取数据.

msgsdbadapter = new MSGSDBAdapter(this);
msgsdbadapter.open();
cons_cursor = msgsdbadapter.fetchConversations();
startManagingCursor(cons_cursor);
Run Code Online (Sandbox Code Playgroud)

之后,我创建了一个SimpleCursorAdapter并将其分配给ListView.ListView现在可以很好地显示一些记录.

String[] from = new String[] { MSGSDBAdapter.KEY_FROM, MSGSDBAdapter.KEY_MSG, MSGSDBAdapter.KEY_DATE};
int[] to = new int[] { R.id.lblFrom, R.id.lblMsgExcerpt, R.id.lblDate };
cons_cursor_adapter = new SimpleCursorAdapter(context, R.layout.conversation_item, cons_cursor, from, to);
lvConversations.setAdapter(cons_cursor_adapter);
Run Code Online (Sandbox Code Playgroud)

接下来,我将新行插入表并通知数据集已更改,但ListView未更新

msgsdbadapter.createMsg(msg);
cons_cursor_adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

当我应该关闭数据库连接?

Com*_*are 7

你需要requery()现有的Cursor,或者再次运行查询以获得新的Cursor并将新的交换Cursor到你的CursorAdapter.

  • @complez:再次运行查询以获得一个新的`Cursor`并使用`changeCursor()`将新的'Cursor`交换到`CursorAdapter`. (6认同)