Java 使用对数据库的更改动态刷新ListView

Java 使用对数据库的更改动态刷新ListView,java,android,eclipse,listview,Java,Android,Eclipse,Listview,我最关心的是性能问题,不希望用户等待进度 我有一个聊天活动,在这里我显示一个列表视图 在这里我发送一条聊天信息 Chats chat = new Chats(chatBox.getText().toString(),Chats.TYPE_MINE, dt.format(now)); chat.personId = chatee.getMyId(); chat.isDelievered = Chats.DELIEVERED_NONE; chats.add(chat); mAdapter.notif

我最关心的是性能问题,不希望用户等待进度

我有一个聊天活动,在这里我显示一个列表视图

在这里我发送一条聊天信息

Chats chat = new Chats(chatBox.getText().toString(),Chats.TYPE_MINE, dt.format(now));
chat.personId = chatee.getMyId();
chat.isDelievered = Chats.DELIEVERED_NONE;
chats.add(chat);
mAdapter.notifyDataSetChanged();
请注意,Chat Delivery现在设置为“无”。因此,基本上,信息被添加到聊天列表中,即使它尚未发送

现在在后面的线程中,这里是正在发生的事情 在我这样做的地方发送消息需要几秒钟的时间

  boolean bool = sendMessage(m);
  if (bool)
     chatee.isDelievered = Chats.DELIEVERED_DONE; (MESSAGE SENT)

  if (chatee.isDelievered == Chats.DELIEVERED_DONE)
  {
     app.mDbHelper.saveMessage(chatee); // SAVING TO DATABASE
     Intent i = new  Intent(Constants.REFRESH_NOTIF).putExtra("refresh",Constants.REFRESH_NOTIF);
     context.sendBroadcast(i);
  }
它将向活动发送广播

现在问题来了。 广播调用此函数

public void callUIMethodForRefresh(Intent intent) 
{
    String ref = intent.getStringExtra("refresh");
    if (ref == null)
    {

    }
    else if (ref.equals(Constants.REFRESH_NOTIF))
    {
    }
}
在这里,我对如何重置添加到列表中的前一个聊天对象感到困惑。 需要注意的是,我可以以非常快的速度发送消息,并且可以为旧消息调用刷新,而新消息已经键入

  • 一种方法是我做一个For循环,检查发送的消息的所有“ChatList”数组,然后替换它的传递通知,但是如果列表中有1000多个对象,那么这也是非常低的性能
  • 有没有办法,我可以用我的listView适配器连接sqlite数据库,它可以自动检测更改并重置listView等等

避免性能问题的最佳策略是什么。

我建议研究和(特别是客户装载机)。将这些与CursorAdapter结合使用,您可以使用ContentProvider插入/删除/更新您的sqlite数据库,并通知加载程序重新加载其数据集并更新CursorAdapter/ListView。

您试图刷新的是什么,是ListView吗?在这种情况下,ListAdapter有一个方法-NotifyDataSangeetched()=>如果是普通的textview和其他元素,您可以使用它重新填充或更新ui上的数据,并重置小部件(textview等)中的新值。这是执行事件数据驱动的ui更新的正确方法。如果您需要支持3.0之前的设备,支持库中提供了加载程序