switchbutton
switchbutton copied to clipboard
点击后通过网络请求更新状态异常
switcher.setOnStateChangedListener(object : SwitchView.OnStateChangedListener {
override fun toggleToOn(view: SwitchView?) {
viewModel.doSomethingAsync(1)
}
override fun toggleToOff(view: SwitchView?) {
viewModel.doSomethingAsync(0)
}
})
viewModel.state.observe(this) {
switcher.setOpen(it)
}
如上场景,doSomethingAsync里会异步执行网络请求,如果请求成功会更新state (这是一个LiveData),更新成功后再通过observe 更新 open 状态。这是一个很正常的流程。
但是,如果网络请求失败,我希望什么都不做,即继续保持之前的状态。也即不会调用 switcher.setOpen 方法,但是我发现一个问题,再次点击无反应
查看源码,发现这里有问题:
@Override
public boolean onTouchEvent(MotionEvent event) {
if ((state == STATE_SWITCH_ON || state == STATE_SWITCH_OFF) && (sAnim * bAnim == 0)) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return true;
case MotionEvent.ACTION_UP:
lastState = state;
bAnim = 1;
if (state == STATE_SWITCH_OFF) {
refreshState(STATE_SWITCH_OFF2);
listener.toggleToOn(this);
} else if (state == STATE_SWITCH_ON) {
refreshState(STATE_SWITCH_ON2);
listener.toggleToOff(this);
}
if (mOnClickListener != null) {
mOnClickListener.onClick(this);
}
break;
}
}
return super.onTouchEvent(event);
}
这个 if 进不去了,因为此时 state 状态为 STATE_SWITCH_OFF2 或 STATE_SWITCH_ON2 ,那么这两个状态有什么用?
或者我的用法有什么问题吗?
用这个toggleSwitch方法收尾延时变化