You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android点击按钮循环切换三种播放模式卡住无法复位问题

问题根因

你写在点击监听里的do-while循环逻辑完全不符合预期:

  • 点击监听触发时,内部的同步代码会一次性执行完毕,也就是说你点一次按钮,这个do-while循环会直接跑完所有满足条件的迭代,根本做不到“点一次切换一个状态”
  • 首次点击时repMode初始值为0:进入do块先自增为1,判断1<2条件成立继续循环,再自增为2,此时判断2<2不成立才退出循环,等于第一次点击就直接把状态拉到了2(Shuffle)
  • 后续再点击按钮时,repMode已经≥2,进入do块先自增为3甚至更大的数,判断不满足循环条件直接退出,此时值已经超出了你when语句覆盖的0/1/2范围,既不会触发对应的状态切换方法,也永远没法复位回初始值。
正确实现

点击事件本身就是按用户点击动作逐次触发的,根本不需要在回调里写循环递增值。每次点击时给状态值加1后对状态总数取模,就能自动在三个状态间循环,不会出现值越界的问题:

var repMode = 0
private const val MODE_TOTAL = 3 // 共Normal/Repeating/Shuffle 3种状态

binding.btnRepMode.setOnClickListener {
    repMode = (repMode + 1) % MODE_TOTAL
    when (repMode) {
        0 -> normalRep()
        1 -> repeatRep()
        2 -> shuffleRep()
    }
}

上面的代码可以直接实现点击逐次切换、到最后一个状态后自动回到初始状态的循环逻辑。

内容的提问来源于stack exchange,提问作者tavinho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:45:08