checkbox单选的状态逻辑,状态好的时候一下就写好了,状态不好的时候要调试比较久,当然主要是对其中的事件不太清楚。
先给出效果图吧。
然后给出代码,
selectZhiFuBaoPay.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (selectWeiXinPay.isChecked()){ if (selectZhiFuBaoPay.isChecked()){ selectWeiXinPay.setChecked(false); PAY_MODE = ALIPAY; } else{ PAY_MODE = TENPAY; } } else{ if (selectZhiFuBaoPay.isChecked()){ PAY_MODE = ALIPAY; } else{ PAY_MODE = ""; } } } }); selectWeiXinPay.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (selectZhiFuBaoPay.isChecked()){ if (selectWeiXinPay.isChecked()){ selectZhiFuBaoPay.setChecked(false); PAY_MODE = TENPAY; } else{ PAY_MODE = ALIPAY; } } else{ if (selectWeiXinPay.isChecked()){ PAY_MODE = TENPAY; } else{ PAY_MODE = ""; } } } });
checkbox的图片效果变换事件我们放在XML文件里面了,主要是一个button 属性的设置,在drawable里面分别设置点击和未点击的背景图就OK了,这样可以减少代码的判断。
从debug的结果来,在响应点击事件前,checkbox的check状态首先已经改变了,然后再去执行onClick里面的事件,然后在onClick里面执行setChecked并不会又执行OnClick里面的事件,就是不会执行我们自己写的代码的逻辑。
这个是互不干连的两个checkbox要建立单选关系,如果是listview里面的checkbox要建立单选关系,考虑用数组列表储存状态信息,每次执行的时候判断里面的状态信息只有一个为true就可以了。