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之前的设备,支持库中提供了加载程序