从不同的 activity 调用 adapter.notifyDataSetChanged
call adapter.notifyDataSetChanged from different activity
我对 android 编程还很陌生。我正在使用 socket.io 在 androd 中构建一个基本的聊天应用程序。我正在使用单例 class 在两个活动之间共享数据。我在第二个 activity 中有一个列表适配器,当我从服务器接收数据时,我想从第一个 activity 调用 adapter.notifyDataSetChanged();
。这可能吗?
第activity:
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();
}
});
注意几点:
adapter.notifyDataSetChanged(); 如果我从第 2 个 activity 调用它,它运行良好。
1st activity 仅在应用程序启动时运行一次
从第一个 activity 调用 notifyDataSetChanged() 没有意义,因为 ListView 在第二个 Activity 中。每当您通过意图打开第二个 activity 时,您应该将数据从第一个 activity 传输到第二个 activity,然后从第二个 activity 本身调用 notifyDataSetChanged()。
不从第一个 activity 调用的原因是您不知道第二个 activity 是否可见。仅当相应列表在屏幕上可见时才更改适配器数据。不要从其他活动修改适配器。
添加到@JyotmanSingh,您可以尝试在 activity 中创建套接字服务和回调处理程序来执行更新...
You can do that by Broadcast
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);
}
});
In SecondActivity
像下面那样注册 BroadcastReceiver
LocalBroadcastManager.getInstance(this).registerReceiver(message,
new IntentFilter("Added_something"));
Declare 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
}
};
参考这个good tutorial for local brodacast
我对 android 编程还很陌生。我正在使用 socket.io 在 androd 中构建一个基本的聊天应用程序。我正在使用单例 class 在两个活动之间共享数据。我在第二个 activity 中有一个列表适配器,当我从服务器接收数据时,我想从第一个 activity 调用 adapter.notifyDataSetChanged();
。这可能吗?
第activity:
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();
}
});
注意几点:
从第一个 activity 调用 notifyDataSetChanged() 没有意义,因为 ListView 在第二个 Activity 中。每当您通过意图打开第二个 activity 时,您应该将数据从第一个 activity 传输到第二个 activity,然后从第二个 activity 本身调用 notifyDataSetChanged()。
不从第一个 activity 调用的原因是您不知道第二个 activity 是否可见。仅当相应列表在屏幕上可见时才更改适配器数据。不要从其他活动修改适配器。
添加到@JyotmanSingh,您可以尝试在 activity 中创建套接字服务和回调处理程序来执行更新...
You can do that by Broadcast
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);
}
});
In SecondActivity
像下面那样注册 BroadcastReceiver
LocalBroadcastManager.getInstance(this).registerReceiver(message,
new IntentFilter("Added_something"));
Declare
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
}
};