屏幕旋转后立即调用Android Checkbox侦听器方法

时间:2013-07-05 17:01:47

标签: android checkbox rotation screen

我开始编写Android应用程序,我遇到了一个复选框问题。

我的活动中有一个复选框,我在OnCheckedChanged方法中输入一条日志消息,当选中复选框时,我会启动,但是当我旋转屏幕时,消息再次出现,好像OnCheckedChanged方法是自动调用的系统再次破坏并创建活动。

发生了什么事?感谢。

5 个答案:

答案 0 :(得分:6)

我曾经遇到过这样的问题。最后我删除了OnCheckedChangedListener并用onClickListener替换它。 在onclick方法中,我使用c.IsChecked()。

我的猜测是,只要用户通过代码(通过c.setchecked(boolean))更改了复选框状态,android就会调用onCheckChange,

在你的情况下,c .setchecked(boolean)方法由android内部调用以恢复UI状态。

希望它会有所帮助。

答案 1 :(得分:6)

我多次使用的最好和最干净的解决方案是检查View.isPressed()。这是有道理的,因为用户在触发回调时会按下Switch。

private Switch.OnCheckedChangeListener mOnSwitch = new Switch.OnCheckedChangeListener()
{
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    {
        if (!buttonView.isPressed())
        {
            // Not from user!
            return;
        }

        // Handle user check change
    }
};

答案 2 :(得分:3)

Android会自动将复选框的状态保留为已保存实例状态的一部分,并在配置更改后将其重新应用于新活动中。当任何内容改变复选框 - 用户或框架的状态时,将调用OnCheckedChangeListener

答案 3 :(得分:0)

实际上,正如有人已经提到的那样,可以通过使用isPressed方法检测谁发起了“状态变化”事件,即它只响应用户操作。
但是,Switch控件存在一个问题,除了单击之外,还可以向左或向右拖动,这也会改变状态但isPressed方法不会检测到。我希望在Switch类中找到一个名为isDragged的方法,但是什么也没有。

很难相信他们忘了实施这样的事情,所以可能我错过了一些东西。

答案 4 :(得分:-3)

尝试在应用标记中的清单文件中添加以下行:

<activity android:name="MainActivity" android:configChanges="keyboardHidden|orientation">

read this,这将解决您的问题。