【发布时间】:2014-10-06 04:43:30
【问题描述】:
我正在尝试使用 asmack api 开发一个 android 聊天应用程序,服务器是 openfire。 我正处于处理来自用户的传入消息并代表他们相应的用户聊天屏幕(即活动)的阶段。
为此,我开发了 2 个活动,即
public class ResultActivity extends Activity
public class UserActivity extends Activity
resultactivity 是维护名册存在信息的活动,例如在线、离开等,因此这只是一个实例。
useractivity 是维护与相应用户的聊天列表的活动。此活动从 ResultActivity 列表中的 onclick 事件开始。因此,根据 Result 活动中没有用户,这可能不止一个。
为了监听传入的数据包(即传入的消息),我在 ResultActivity 中添加了一个监听器,它将消息添加到全局数组列表中。
在结果活动中:
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
MainActivity.connection.addPacketListener(receive_message, filter);
PacketListener receive_message = new PacketListener() {
public void processPacket(Packet packet) {
message = (Message) packet;
String sender=null,body=null,sender_final=null;
if (message.getBody() !=null) {
Log.d("UA", "message from "+StringUtils.parseBareAddress(message.getFrom()));
Log.d("UA", "message is "+message.getBody());
sender = StringUtils.parseBareAddress(message.getFrom());
sender_final=sender.substring(0, sender.indexOf('@'));
body = message.getBody();
Log.d("UA", "Sender : "+sender_final+" body : "+body);
userMessage = new UserMessage("In", sender_final, body);
userMessage_list.add(userMessage);
userMessage_list.add(userMessage);
}
}
};
在全局消息列表(即 userMessage_list)中添加消息后,我需要使用传入消息更新用户活动。 userMessage_list 是基本适配器扩展类的getview方法中用作数组的数组列表。
所以现在我需要使用 notifydatasetchanged 方法更新 userActivity 列表。
在用户活动中:
private class UserActivityThread extends Thread {
@Override
public void run() {
UserActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
userAdapter.notifyDataSetChanged();
}
});
}
}
那么如何在另一个activity中调用notifydatasetchanged方法。
我很想知道在 whatsapp 或任何聊天应用程序中如何处理这种情况。
【问题讨论】:
标签: android android-listview xmpp android-adapter