7

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

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

怎么了??谢谢。

4

4 回答 4

12

我多次使用过的最好和最干净的解决方案是检查 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
    }
};
于 2017-01-31T20:52:19.213 回答
8

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

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

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

希望它会有所帮助。

于 2013-07-05T19:21:00.733 回答
0

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

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

于 2014-07-03T20:12:16.783 回答
-4

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

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

读这个,这将解决你的问题。

于 2013-07-05T19:13:06.440 回答