Open aigc-in-all opened 8 months ago
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 状态。这是一个很正常的流程。
doSomethingAsync
state
但是,如果网络请求失败,我希望什么都不做,即继续保持之前的状态。也即不会调用 switcher.setOpen 方法,但是我发现一个问题,再次点击无反应
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 ,那么这两个状态有什么用?
if
或者我的用法有什么问题吗?
用这个toggleSwitch方法收尾延时变化
toggleSwitch
如上场景,
doSomethingAsync
里会异步执行网络请求,如果请求成功会更新state
(这是一个LiveData),更新成功后再通过observe 更新 open 状态。这是一个很正常的流程。但是,如果网络请求失败,我希望什么都不做,即继续保持之前的状态。也即不会调用
switcher.setOpen
方法,但是我发现一个问题,再次点击无反应查看源码,发现这里有问题:
这个
if
进不去了,因为此时state
状态为 STATE_SWITCH_OFF2 或 STATE_SWITCH_ON2 ,那么这两个状态有什么用?或者我的用法有什么问题吗?