使用对数据库android进行的更改动态刷新ListView

时间:2014-01-09 17:27:19

标签: java android eclipse listview

我最关心性能问题,不希望用户等待进展。

我有一个chatActivity,我在这里展示了一个ListView。

这里我发送一个chatMessage

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 delievery现在设置为NONE。所以基本上消息被添加到聊天列表中,即使它尚未发送。

现在回到主题这里是正在发生的事情 在我执行此操作时发送消息需要几秒钟

  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等等吗?

这可能是避免性能问题的最佳策略。

1 个答案:

答案 0 :(得分:2)

我建议调查ContentProvidersLoaders(特别是CusorLoader)。将它们与CursorAdapter相结合,您可以使用ContentProvider插入/删除/更新您的sqlite数据库,并通知您的加载器重新加载它的数据集并更新CursorAdapter / ListView。