Switch的原有特性导致在网络请求数据还未成功时,就已经切换了状态,可能与真实状态不符合,所以需要关闭手动切换的特性,使用clickable属性有点问题,能够手动滑动开关
我的解决办法是拦截组件的触摸事件,并手动返回一个点击事件,就解决了手动点击开关导致的与真实数据不一致的问题
public class MySwitch extends Switch {
OnClickListener l;
public MySwitch(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP)
if (l != null)
l.onClick(this);
return true;
}
@Override
public void setOnClickListener(@Nullable OnClickListener l) {
this.l = l;
}
}