【发布时间】:2014-01-09 17:27:18
【问题描述】:
我最关心性能问题,不希望用户等待进度。
我有一个 chatActivity,我在其中显示一个 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.notifyDataSetChanged();
请注意,现在聊天传递设置为无。因此,基本上该消息已被添加到聊天列表中,即使尚未发送。
现在在后面的线程中发生了什么事 在我这样做的地方发送消息需要几秒钟
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 多个对象,这又是非常低的性能。李>
- 有什么办法,我可以将 sqlite 数据库与我的 listView 适配器连接,它会自动检测更改并重置 listView 等?
避免性能问题的最佳策略是什么。
【问题讨论】:
-
你想刷新什么,它是一个 Listview - 在这种情况下 ListAdapter 有一个方法 - notifyDataSetChanged() => developer.android.com/reference/android/widget/… 如果它是一个普通的 textview 和其他元素,它将对你有用,您已经重新填充或更新了 ui 上的数据并重置了 Widgets(Textview 等)中的新值
标签: java android eclipse listview