在不触发 OnCheckChanged 侦听器的情况下更改开关的状态

Saf*_*afa 7 android android-switch

是否有任何解决方法可以帮助我在switch.setChecked(true);不触发的情况下以编程方式更改 Switch 小部件的状态OnCheckedChangedlistener()

switch.setChecked(true);OnCheckedChangedlistener()自动触发,但我只需要在用户手动更改状态时触发它。所以我需要停止
switch.setChecked(true);触发OnCheckedChangedlistener()

New*_*oid 17

您应该使用而不是用来onClickListener处理开关事件

 mySwitch.setOnCheckedChangeListener { compoundButton, isChecked ->
    if (compoundButton?.isPressed == true) 
        viewModel.onMySwitchChanged(isChecked)
}
Run Code Online (Sandbox Code Playgroud)

当您将开关状态设置为 或时,检查if (compoundButton?.isPressed == true) 会阻止运行viewModel.onMySwitchChangedmySwitch.isChecked = truemySwitch.isSelected = true

  • 不知道为什么这没有得到更多的支持,这有效并简化了很多事情! (2认同)

Fra*_*nco 11

我通过使用setOnClickListener()而不是解决了这个问题setOnCheckedChangeListener(),然后我可以isChecked在点击侦听器中使用它来知道是否Switch选中了,例如:

switchView.setOnClickListener {
    val isChecked = switchView.isChecked

    // Do something with the check status
}
Run Code Online (Sandbox Code Playgroud)


ego*_*ldx 6

您可以先删除该侦听器,然后再重新设置它。

switch.setOnCheckChangedListener(null);
switch.setChecked(true);
switch.setOnCheckChangedListener(mOnCheckChangedListener);
Run Code Online (Sandbox Code Playgroud)