2

我有一个带有Switch Control. 通过这个开关控制,用户可以打开/关闭一个 tcp 服务器。

现在我有一个与这里类似的问题。如果开关(以及服务器)打开并且方向发生变化,onclicklistener则会再次调用,因此服务器也会再次启动。

我试图通过检查客户端是否为空来处理这个问题:

OnCheckedChangeListener listener = new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {    
        if(isChecked) {
            if (client == null)
              startCubeSolverServer();
        } else {
            if (client != null)
              stutdownCubeSolverServer();
        }
    }
};

但是因为客户端对象是我活动的私有变量,所以每次方向更改都会重置为空。

changeHandler如果用户视图中的值没有改变,是否有一个简单的解决方法可以不运行?

4

1 回答 1

1

在您的情况下系统的行为是正确的。当方向改变时应该调用 onCheckedChanged。

现在对于您的情况,如果 tcp 服务器是一个服务,那么您应该在该服务的 onCreate 方法中而不是在 onStartCommand 中移动所有初始化,这样做您不必在方向更改时什么都不做,因为该服务只是由系统创建一次,无论您要重新启动多少次都没有关系。

另一种解决方案是处理开关按钮的 onClick 事件,而不是 onCheckedChanged,因为 onClick 在方向更改后不会触发。但是,如果您这样做,您必须研究开关按钮的 onClick 方法是在选中状态更改之前还是之后触发。

希望这可以帮助...

于 2013-07-14T01:31:07.703 回答