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

RadioGroup bottomMenuBar = (RadioGroup) findViewById(R.id.bottomMenuBar);bottomMenuBar.setOnCheckedChangeListener(this);bottomMenuBar.check(R.id.tab_new);@Overridepublic 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中找到一个,请点这里,他这个问题是调用三次,不过没关系,最终想要的效果都是让它只调用一次。

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

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

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

完。

快乐要有悲伤作陪,雨过应该就有天晴。

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

相关文章:

你感兴趣的文章:

标签云: