Android 方向改变调用 Switch.onChange

标签 android android-orientation

我有一个带有开关控制的 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/

相关文章:

android - 如何从不同角度旋转 View ?

android - 让用户改变默认方向

android - Android 的 EditText : KeyListener 问题

android - 在方向更改时处理 Fragment 的万无一失的方法

android - 在android中绘制镜像位图

android - ExpandableListView - 组指示被拉伸(stretch)以适合文本大小

android - 在两侧的android中将方向设置为横向

安卓 2.3.3 & 4.1.2 安卓 :configChanges for detecting Orientation change

java - 如何等到数据接收并完全处理后,再发送下一组数据请求?

java - 修改后的 Tabhost 示例在启动时崩溃