我有一个Switch Control
的活动。使用此开关控制,用户可以打开/关闭tcp服务器。
现在我对here有一个类似的问题。如果Switch(以及服务器)打开并且方向发生更改,则再次调用onclicklistener
,因此服务器也会再次启动。
我试图通过检查客户端是否为空来处理这个问题:
OnCheckedChangeListener listener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
if (client == null)
startCubeSolverServer();
} else {
if (client != null)
stutdownCubeSolverServer();
}
}
};
但是因为客户端对象是我的活动的私有变量,所以它会被重置为每个方向更改为null。
如果用户视图中的值没有更改,是否可以轻松修复changeHandler
?
答案 0 :(得分:1)
系统在您的情况下的行为是正确的。当方向改变时,应该调用onCheckedChanged。
现在针对您的情况,如果tcp服务器是一个服务,那么您应该在onStartCommand中移动该服务的onCreate方法中的所有初始化,这样做,因为方向更改,您不必执行任何操作服务只能由系统创建一次,并且你要重新启动它的次数并不重要。
另一种解决方案是处理切换按钮的onClick事件而不是onCheckedChanged,因为在方向更改后onClick不会启动。但是,如果执行此操作,则必须研究切换按钮的onClick方法是否在选中状态更改之前或之后触发。
希望这会有所帮助......