使用光标和 SimpleCursorAdapter 更新 ListView
我的光标是从 sqlite 获取数据。
msgsdbadapter = new MSGSDBAdapter(this);
msgsdbadapter.open();
cons_cursor = msgsdbadapter.fetchConversations();
startManagingCursor(cons_cursor);
之后,我创建一个 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);
接下来,我将新行插入表中并通知数据集已更改,但 ListView 未更新
msgsdbadapter.createMsg(msg);
cons_cursor_adapter.notifyDataSetChanged();
什么时候应该关闭数据库连接?
My cursor is fetch data from sqlite.
msgsdbadapter = new MSGSDBAdapter(this);
msgsdbadapter.open();
cons_cursor = msgsdbadapter.fetchConversations();
startManagingCursor(cons_cursor);
After that I create a SimpleCursorAdapter and assign it to ListView. The ListView now can display some records well.
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);
Next, I insert new row into table and notify dataset changed, but the ListView is not update
msgsdbadapter.createMsg(msg);
cons_cursor_adapter.notifyDataSetChanged();
And when I should close the db connection?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要
requery()
现有的Cursor
,或者再次运行查询以获取新的Cursor
并交换新的Cursor
到您的CursorAdapter
中。You need to either
requery()
the existingCursor
, or run the query again to get a freshCursor
and swap the newCursor
into yourCursorAdapter
.如果您使用 ListFragment ,最好的解决方案是将其放入此示例中:
The best solution if your using the ListFragment is to put this in inside this sample: