从不同的活动调用adapter.notifyDataSetChanged

时间:2016-02-10 07:28:37

标签: android listview socket.io listadapter

我对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();

    }
});

需要注意几点:

  • adapter.notifyDataSetChanged(); 如果从第二个活动调用它,效果很好。
  • 第一个活动仅在启动应用程序时运行一次
  • 3 个答案:

    答案 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
            }
        };
    

    请参阅此good tutorial for local brodacast

    答案 1 :(得分:0)

    当ListView在Second Activity中时,从第一个活动调用notifyDataSetChanged()是没有意义的。每当您通过意图打开第二个活动时,您应该将数据从第一个活动转移到第二个活动,然后从第二个活动本身调用notifyDataSetChanged()。

    不从第一项活动致电的原因是您不知道第二项活动是否可见。仅在屏幕上显示相应列表时才更改适配器数据。不要从其他活动修改适配器。

    答案 2 :(得分:0)

    添加到@JyotmanSingh,您可以尝试在活动中创建套接字服务和回调处理程序以执行更新...