使用光标和 SimpleCursorAdapter 更新 ListView

发布于 2024-12-11 15:24:13 字数 802 浏览 0 评论 0原文

我的光标是从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

Smile简单爱 2024-12-18 15:24:13

您需要requery()现有的Cursor,或者再次运行查询以获取新的Cursor并交换新的Cursor 到您的 CursorAdapter 中。

You need to either requery() the existing Cursor, or run the query again to get a fresh Cursor and swap the new Cursor into your CursorAdapter.

云胡 2024-12-18 15:24:13

如果您使用 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);}  
}

The best solution if your using the ListFragment is to put this in inside this sample:

 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);}  
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文