Java 在android中使用socket.io时,如何在运行时获取视图?

Java 在android中使用socket.io时,如何在运行时获取视图?,java,android,node.js,socket.io,Java,Android,Node.js,Socket.io,我在前端有一个android应用程序,在后端有一个NodeJSSocket 在活动中有一个聊天列表,我可以从socket.onevent获取它们 此列表中的每个项目都有一个customview,当收到套接字事件时,我需要使用不同的值更新此customview 我该怎么做 以下是获取聊天列表时的代码: final Handler mHandler04 = new Handler(Looper.getMainLooper()); mHandler04.post(new Run

我在前端有一个android应用程序,在后端有一个NodeJSSocket

在活动中有一个聊天列表,我可以从
socket.on
event获取它们

此列表中的每个项目都有一个customview,当收到套接字事件时,我需要使用不同的值更新此customview

我该怎么做

以下是获取聊天列表时的代码:

final Handler mHandler04 = new Handler(Looper.getMainLooper());
            mHandler04.post(new Runnable() {
                @Override
                public void run() {
                    SocketManager.getInstance().getSocket().on("allchatres", new Emitter.Listener() {
                        @Override
                        public void call(final Object... args) {
                            g.context.runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    JSONArray jsonArray = (JSONArray) args[0];
                                    Log.d(TAG, "run: " + jsonArray);
                                        try {
                                            for (int i = 0; i < jsonArray.length(); i++) {
                                                createView(jsonArray.getJSONObject(i).getString("title"), jsonArray.getJSONObject(i).getString("body"));
                                            }
                                        } catch (JSONException e) {
                                            e.printStackTrace();
                                        }
                                }
                            });
                        }
                    });
                }
            }); 
但当我想更新列表中的customview时,如下所示:

int count = LinearLayoutItemHolder.getChildCount() ;
Log.d(TAG,"child count : " + count) ;
for(int i = 0 ;i<count ; i++)
{
    View v = LinearLayoutItemHolder.getChildAt(i) ;

}
如何获取LinearLayoutItemHolder中的每个customview

我想更改另一个socket.on事件中的customView值,但我无法更改

我找了很多,但没有找到任何有用的东西


任何建议都会有帮助

最后,我找到了实现目标的最佳方法:使用RecyclerView


我在使用自定义视图时遇到了一些困难,所以我改用了recycler视图。

最后,我找到了实现目标的最佳方法:使用RecyclerView


我在使用自定义视图时遇到了一些困难,所以我改用了recycler视图。

这里的g.context是什么?我想知道在哪里定义对象g?@M.SaadLakhan,这只是当前上下文,我将片段的上下文保存在g类中的一个静态变量中,这不是一个好的方法,在这里产生了问题。这将导致内存泄漏。我认为这里你有关于上下文的问题。不能对新视图使用静态上下文。每个视图都有自己的上下文。所以请解决您的问题将要解决的上下文问题。我使用这种方法是因为我使用的是片段,当我留下一个片段并再次返回时,当我说getActivity().runOnUiThread时,应用程序会崩溃,因此,我保存了context@M.saadlakhan当您创建片段将活动上下文传递给片段并使用该上下文时,如果您需要对活动的引用,那么您可以将活动传递给您的片段,并在片段的构造函数中将该上下文和活动设为私有成员,然后使用该上下文和对父活动的引用。我希望你能理解我想说的,这里什么是g.context?我想知道在哪里定义对象g?@M.SaadLakhan,这只是当前上下文,我将片段的上下文保存在g类中的一个静态变量中,这不是一个好的方法,在这里产生了问题。这将导致内存泄漏。我认为这里你有关于上下文的问题。不能对新视图使用静态上下文。每个视图都有自己的上下文。所以请解决您的问题将要解决的上下文问题。我使用这种方法是因为我使用的是片段,当我留下一个片段并再次返回时,当我说getActivity().runOnUiThread时,应用程序会崩溃,因此,我保存了context@M.saadlakhan当您创建片段将活动上下文传递给片段并使用该上下文时,如果您需要对活动的引用,那么您可以将活动传递给您的片段,并在片段的构造函数中将该上下文和活动设为私有成员,然后使用该上下文和对父活动的引用。我希望你能理解我想说的话
int count = LinearLayoutItemHolder.getChildCount() ;
Log.d(TAG,"child count : " + count) ;
for(int i = 0 ;i<count ; i++)
{
    View v = LinearLayoutItemHolder.getChildAt(i) ;

}
child count : 0