效果:只能选中一个radiobutton
实现的方法:
1.首先我们要将三个radiobutton的layout设置成可以点击的,然后我们将这三个radio设置成不可以点击的,我们通过点击layout来实现,radiobutton的选中,通过设置 android:focusable="true" android:clickable="true"属性来实现
2.我们在每一个layout中设置一个tag,用于管理当前点击的是哪个radiobutton
例子:
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/largePadding"
android:paddingBottom="@dimen/largePadding"
android:background="@drawable/selector_list_item"
android:focusable="true"
android:clickable="true"
android:tag="alipay">
3.我们在activity中分别实例化上面radiobutton和layout的对象
pyRadioButton= (RadioButton) findViewById(R.id.rb_alipay); wxRadioButton= (RadioButton) findViewById(R.id.rb_webchat); baiduRadioButton= (RadioButton) findViewById(R.id.rb_bd); pyRelativeLayout= (RelativeLayout) findViewById(R.id.rl_alipay); wxRelaticeLayout= (RelativeLayout) findViewById(R.id.rl_wechat); bdRelativeLayout= (RelativeLayout) findViewById(R.id.rl_bd);
4.创建爱一个hasmap用于存储三个radiobutton对象,并且给他们赋予一个值,值为下面的值
private HashMap,RadioButton> channels = new HashMap<>(3);
channels.put(CHANNEL_ALIPAY,pyRadioButton); channels.put(CHANNEL_WECHAT,wxRadioButton); channels.put(CHANNEL_BFB,baiduRadioButton);
/** * 银联支付渠道 */ private static final String CHANNEL_UPACP = "upacp"; /** * 微信支付渠道 */ private static final String CHANNEL_WECHAT = "wx"; /** * 支付支付渠道 */ private static final String CHANNEL_ALIPAY = "alipay"; /** * 百度支付渠道 */ private static final String CHANNEL_BFB = "bfb"; /** * 京东支付渠道 */ private static final String CHANNEL_JDPAY_WAP = "jdpay_wap";
6.设置三个layout布局的点击事件
pyRelativeLayout.setOnClickListener(this); wxRelaticeLayout.setOnClickListener(this); bdRelativeLayout.setOnClickListener(this);
/** * radiobutton的点击事件,让每个按钮互斥 * @param v */ @Override public void onClick(View v) { selectPayChannle(v.getTag().toString()); }
调用一个方法,这个方法就是根据,当前点击的是哪个layout,来实现radiobutton的互斥,选中
public void selectPayChannle(String paychannel){ for (Map.Entry,RadioButton> entry:channels.entrySet()){ // payChannel = paychannel; RadioButton rb = entry.getValue(); if(entry.getKey().equals(paychannel)){ boolean isCheck = rb.isChecked(); rb.setChecked(!isCheck); } else rb.setChecked(false); } }
流程大概是这样:遍历hasmap中的对象,然后抓取每个对象的值是否和点击layout传进去的值相同,相同取反,每点击的点击,点击的设置成不点击状态
********************以上所有的步骤已经完成