Android 使simplecursoradapter反映对数据库的更改

Android 使simplecursoradapter反映对数据库的更改,android,listview,simplecursoradapter,Android,Listview,Simplecursoradapter,在我的应用程序中,有一个SqlLite数据库,其中有一个包含消息列表的表。每封邮件都有一个“发件人”和一个“正文” 我有一个包含ListView的活动,它使用游标和游标适配器简单地显示数据库中的所有消息。以下是相关代码: Cursor cursor = mDbAdapter.fetchAllMessages(); String[] from = { MessageDbAdapter.KEY_SENDER, MessageDbAdapter.KEY_BODY }; int[

在我的应用程序中,有一个SqlLite数据库,其中有一个包含消息列表的表。每封邮件都有一个“发件人”和一个“正文”

我有一个包含
ListView
的活动,它使用游标和游标适配器简单地显示数据库中的所有消息。以下是相关代码:

    Cursor cursor = mDbAdapter.fetchAllMessages();
    String[] from = { MessageDbAdapter.KEY_SENDER, MessageDbAdapter.KEY_BODY };
    int[] to = { R.id.TextSender , R.id.TextMessage };
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.messagerow, cursor, from, to);
    mMessageList.setAdapter(adapter);
在我的应用程序中,有一个在后台运行的服务可以随时向数据库插入新消息(用户可能正在查看列表活动,也可能没有查看列表活动)

我的问题如下:如果用户正在查看列表活动,并且数据库中添加了一条新消息,我如何使
ListView
反映此更改(显示新添加的消息)


我曾考虑在数据库中添加消息后,将消防服务广播。然后,当活动收到此广播时,再次执行查询。但是,当我知道只添加了一条消息时,我担心
fetchAllMessages()
效率低下,特别是因为可能会经常添加消息

注册一个广播接收器,以监听您的服务发送的意图如何。收到该意图后,更新活动中的ListView。请阅读我对问题的新编辑。如果只更新了一行,则可以调用get getChildAd(int index)并更新单行。看到这个帖子:你可能想考虑使用一个加载器,它简化了这些问题,你可以试着从你的RealFiver方法调用Currase.Rebug()。然后调用adapter.notifyDataSetChanged(),正如Vicki所说……由于startManagingCursor(Cursor c)已被弃用,加载程序可能会派上用场。注册一个广播接收器来监听服务发送的意图如何。收到该意图后,更新活动中的ListView。请阅读我对问题的新编辑。如果只更新了一行,则可以调用get getChildAd(int index)并更新单行。看到这个帖子:你可能想考虑使用一个加载器,它简化了这些问题,你可以试着从你的RealFiver方法调用Currase.Rebug()。然后调用adapter.notifyDataSetChanged(),正如Vicki所说的那样……由于startManagingCursor(游标c)已被弃用,所以加载程序可能会派上用场。