关于checkbox小结
checkbox.setChecked()执行此方法时,会主动再执行一次 点击事件OnCheckedChangeListener,会造成点一次再回调时会再次下发一次指令。checkbox可根据checkbox.isPressed()来判断是否是点击事件还是纯粹的checkbox.setChecked()来重置UI进行区分
private CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton checkbox, boolean isChecked) { LogActs.d("checkbox.isPressed()=" + checkbox.isPressed()); if (!buttonView.isPressed()) { return; }
其次也可以先重置UI,然后利用在三秒后根据实际情况没有收到回调时,再绘制一次UI,如下
Message message = new Message(); message.what = MOVE_MESSAGE; message.obj = buttonView; handler.sendMessageDelayed(message, DELAY_TIME);
@SuppressLint("HandlerLeak") private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case MOVE_MESSAGE: CheckBox checkBox = (CheckBox) msg.obj; if (checkBox.isChecked()) { checkBox.setChecked(false); } } } };