RadioGroup调用check(id)方法时,onCheckedChanged方法被执行多次解决办法

RadioGroup bottomMenuBar = (RadioGroup) findViewById(R.id.bottomMenuBar);
bottomMenuBar.setOnCheckedChangeListener(this);
bottomMenuBar.check(R.id.tab_new);
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
	LogUtil.info(TAG, "onCheckedChanged invoked");
		
}
上面的代码块很简单,就不解释了,RadioGroup是比较常用的控件,常用在单项选择效果中。

上面代码,我给RadioGroup设置了一个选中改变监听器(RadioGroup.OnCheckedChangeListener),然后调用它的check(id)方法,选中其中一个RadioButton,后面一段是监听回调方法,我简单的做了一个log打印处理。

运行程序时,发现onCheckedChanged invoked被打印了两次,也就是说回调方法被调用了两次:



这明显是我不希望看到的效果,例如我选中某一项,然后做网络请求操作,这种场景下,就会触发两次网络请求,我当然不希望这种情况发生。


如何解决:

我尝试了一些办法,最终决定放弃给RadioGroup设置onCheckedChangedListener这种方式来监听RadioButton的选中事件,而是给每个RadioButton都设置OnClickListener方法来实现,效果还是不错的,可以解决问题。但感觉不爽,心想这明明是个RadioButton,却要用click事件来监听它的选中,总感觉很别扭(看来我有轻微的强迫症,哈哈)。


这里别看了,重点在下一段

本来打算就这么做算了,反正能实现效果。后来有一天闲着没事,又想到了这个问题,心中还是觉得很别扭,于是去百度,谷歌了一下,百度真心没有谷歌强,虽然只是搜个问题而已,不足以说明什么哈,我百度了很久,没收获,然后寄希望于谷歌,真没让我失望,同样的问题,复制黏贴到谷歌,搜了一次,还真找到了一些解决思路。


在stackoverflow中找到一个,请点这里,他这个问题是调用三次,不过没关系,最终想要的效果都是让它只调用一次。

从文中得知一个思路,Call b.setChecked(true); instead.  试了一下,的确可以解决,将上面代码中的check方法删掉用:

((RadioButton) bottomMenuBar.findViewById(R.id.tab_new)).setChecked(true);

运行程序,看log,onCheckedChanged方法只调用了一次:



完。


评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值