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

来源:互联网 发布:web前端连接数据库 编辑:程序博客网 时间:2024/04/29 00:47



http://blog.csdn.net/piglovesula/article/details/9820521

http://blog.csdn.net/piglovesula/article/details/9820521

http://blog.csdn.net/piglovesula/article/details/9820521

http://blog.csdn.net/piglovesula/article/details/9820521

http://blog.csdn.net/piglovesula/article/details/9820521

http://blog.csdn.net/piglovesula/article/details/9820521



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

 16306人阅读 评论(8) 收藏 举报
 分类:
[java] view plaincopyprint?
  1. RadioGroup bottomMenuBar = (RadioGroup) findViewById(R.id.bottomMenuBar);  
  2. bottomMenuBar.setOnCheckedChangeListener(this);  
  3. bottomMenuBar.check(R.id.tab_new);  
[java] view plaincopyprint?
  1. @Override  
  2. public void onCheckedChanged(RadioGroup group, int checkedId) {  
  3. <span style="white-space:pre">  </span>LogUtil.info(TAG, "onCheckedChanged invoked");  
  4.           
  5. }  
上面的代码块很简单,就不解释了,RadioGroup是比较常用的控件,常用在单项选择效果中。

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

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



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


如何解决:

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


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

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


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

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

[java] view plaincopyprint?
  1. ((RadioButton) bottomMenuBar.findViewById(R.id.tab_new)).setChecked(true);  

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



完。



0 0
原创粉丝点击