我对android编程很新。我使用 socket.io 在androd中构建基本聊天应用程序。我使用单例类在两个活动之间共享数据。我在第二个活动中有一个列表适配器,当我从服务器接收数据时,我想从第一个活动中调用adapter.notifyDataSetChanged();
。这可能吗?
在第一项活动中:
mSocket.on("New", new Emitter.Listener() {
@Override
public void call(Object... args) {
JSONObject temp = (JSONObject) args[0];
Singleton.getInstance().AddMsg(temp);
// I want to call the adapter defined in the second activity here. i.e. adapter.notifyDataSetChanged();
}
});
需要注意几点:
答案 0 :(得分:2)
您可以通过广播
来实现
mSocket.on("New", new Emitter.Listener() {
@Override
public void call(Object... args) {
JSONObject temp = (JSONObject) args[0];
Singleton.getInstance().AddMsg(temp);
// I want to call the adapter defined in the second activity here. i.e. adapter.notifyDataSetChanged();
// send broadcast that is added something
Intent intent = new Intent("Added_something");
//intent.putExtra("current speed", "102.4");
//intent.putExtra("latitude", "12.2342342");
//intent.putExtra("longitude", "12.21124");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
});
在 SecondActivity
中
注册BroadcastReceiver
,如下所示
LocalBroadcastManager.getInstance(this).registerReceiver(message,
new IntentFilter("Added_something"));
声明
BroadcastReceiver
private BroadcastReceiver message = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
// refresh your adapter from SecondAdapter itself
}
};
答案 1 :(得分:0)
当ListView在Second Activity中时,从第一个活动调用notifyDataSetChanged()是没有意义的。每当您通过意图打开第二个活动时,您应该将数据从第一个活动转移到第二个活动,然后从第二个活动本身调用notifyDataSetChanged()。
不从第一项活动致电的原因是您不知道第二项活动是否可见。仅在屏幕上显示相应列表时才更改适配器数据。不要从其他活动修改适配器。
答案 2 :(得分:0)
添加到@JyotmanSingh,您可以尝试在活动中创建套接字服务和回调处理程序以执行更新...