Java 在android中使用socket.io时,如何在运行时获取视图?
我在前端有一个android应用程序,在后端有一个NodeJSSocket 在活动中有一个聊天列表,我可以从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
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