gpt4 book ai didi

android - 更改 GlobalVariables 时如何通知 Activity

转载 作者:行者123 更新时间:2023-11-29 15:24:10 25 4
gpt4 key购买 nike

我有一个通过 USB 线连接到计算机的 android 应用程序。我使用 TCPServer 类来发送消息和收听。例如:

当我发送如下消息时:request:x
我得到响应:response:x:55

我需要根据收到的回复更改我的 Activity 。目前我通过将 Activity 和 Activity 类对象传递给 TCPServer 的构造函数暂时解决了这个问题

public TCPServer(int portNum, Activity activity, IntroActivity ia) {
super();
port = portNum;
this.activity = activity;
this.ia = ia;
}

然后在我收到回复后:

void updateButton(final int color, final String txt) {
activity.runOnUiThread(new Runnable() {
public void run() {
ia.getConnectionButton().setBackgroundColor(color);
ia.getConnectionButton().setText(txt);
}
});
}

如您所见,这根本没有效果。每当收到相关变量时,我都需要以某种方式通知 Activity 。我为 GlobalVariables 使用了一个类,并在 listen() 之后更改了那些静态变量,但是我在通知 Activity 时遇到了麻烦。

最佳答案

首先,传递 Activity 实例几乎总是不好的做法。这是一个糟糕的时期。

定义一个接口(interface)并使用回调让 Activity 知道已收到响应。

public interface ResponseReceivedListener {
void onResponseReceived(int arg1, string arg2); // <- add arguments you want to pass back
}

在您的 TCPServer 类中:

ArrayList<ResponseReceivedListener> listeners = new ArrayList<>();

// ...

public void setResponseReceivedListener(ResponseReceivedListener listener) {
if (!listeners.contains(listener) {
listeners.add(listener);
}
}

public void removeResponseReceivedListener(ResponseReceivedListener listener) {
if (listeners.contains(listener) {
listeners.remove(listener);
}
}

当您收到回复时:

for (ResponseReceivedListener listener : listeners) {
listener.onResponseReceived(arg1, arg2);
}

在您的 Activity 中:

public class MainActivity extends Activity implements ResponseReceivedListener {

// ...

@Override
public void onCreate(Bundle savedInstanceState) {
// ...

tcpServer.setResponseReceivedListener(this);

// ...
}

public void onResponseReceived(int arg1, string arg2) {
// do whatever you need to do
}

// ...
}

全靠内存,错别字请见谅

这种方法解耦了类。 TCP 服务器不知道这些 Activity 。它只是回调任何已注册的监听器。这些听众可能是 Activity ,也可能是服务。它们可能是 MySparklyUnicorn 的实例。服务器既不知道也不关心。它只是说“如果有人感兴趣,我已经收到回复,这里是详细信息”。

关于android - 更改 GlobalVariables 时如何通知 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14660671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com