使用游标和SimpleCursorAdapter更新ListView

时间:2011-10-25 08:22:36

标签: android sqlite listview cursor

我的光标是从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();

当我关闭数据库连接时?

2 个答案:

答案 0 :(得分:7)

您需要requery()现有Cursor,或再次运行查询以获得新的Cursor并将新的Cursor换入您的CursorAdapter

答案 1 :(得分:0)

如果您使用ListFragment将最佳解决方案放在此示例中,那么最佳解决方案是:

 public SimpleCursorAdapter myNote;
    public class NOteLIST_MAIN extends ListFragment {

    @SuppressWarnings("deprecation")
    @Override
    public void onResume() {
        super.onResume();
        myNote.getCursor().requery();//Don't forget to put these on onResume }

    private void DataLoader(){private void DataFiller(){
          myNote = new SimpleCursorAdapter(getActivity(), R.layout.notes_row_line, notesCursor, from, to,0);
          setListAdapter(myNote);}  
}