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
相关产品推荐
相关产品推荐

