我有一个带有开关控制
的 Activity 。使用此开关控件,用户可以打开/关闭 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();
}
}
};
但因为客户端对象是我的 Activity 的私有(private)变量,所以每次方向更改时它都会重置为 null。
如果用户 View 中的值没有改变,是否有一个不运行 changeHandler
的简单修复?
最佳答案
系统在您的情况下的行为是正确的。 onCheckedChanged 应该在方向改变时被调用。
现在对于你的情况,如果 tcp 服务器是一个服务,那么你应该将所有初始化移动到该服务的 onCreate 方法中,而不是在 onStartCommand 中,这样做你不必在方向改变时什么都不做,因为服务仅由系统创建一次,您要重新启动它多少次都没有关系。
另一种解决方案是处理切换按钮的 onClick 事件而不是 onCheckedChanged,因为 onClick 在方向更改后不会触发。但是,如果您这样做,则必须研究切换按钮的 onClick 方法是在选中状态更改之前还是之后触发。
希望这有助于...
关于Android 方向改变调用 Switch.onChange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17634022/