我开始编写 android 应用程序,但我遇到了一个复选框问题。
我的活动中有一个复选框,我在 OnCheckedChanged 方法中放置了一条日志消息,以便在选中该复选框时启动,但是当我旋转屏幕时,该消息再次出现,好像系统破坏时自动调用了 OnCheckedChanged 方法并再次创建活动。
怎么了??谢谢。
我多次使用过的最好和最干净的解决方案是检查 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
}
};
我曾经遇到过这样的问题。太令人沮丧了,最后我删除了 OnCheckedChangedListener 并用 onClickListener 替换它。在 onclick 方法中,我使用 c.IsChecked()。
我的猜测是,只要用户通过代码(通过 c.setchecked(boolean))更改复选框状态,android就会调用 onCheckChange,
在您的情况下,c.setchecked(boolean) 由 android 内部调用以恢复 UI 状态。
希望它会有所帮助。
实际上,正如有人已经提到的,使用 isPressed 方法可以检测谁发起了“状态改变”事件,即它只响应用户操作。
然而,Switch 控件存在一个问题,除了单击之外,它还可以向左或向右拖动,这也会改变状态,但 isPressed 方法没有检测到这一点。我希望在 Switch 类中找到一个可能称为 isDragged 的方法,但什么也没有。
很难相信他们忘记实施这样的事情,所以我可能遗漏了一些东西。
尝试在应用程序标记的清单文件中添加以下行:
<activity android:name="MainActivity" android:configChanges="keyboardHidden|orientation">
也读这个,这将解决你的问题。