最新消息:文章中包含代码时,请遵守代码高亮规范!

完美解决RadioButton默认选中调用setOnCheckedChangeListener【原创】

Android sunshine 175浏览 0评论

记得有一次在项目中 出现了一个bug,导致筛选的时候列表中的数据重复出现,我唯一能想到的就是走了两遍获取数据的接口,但是仔细查了一下代码没有发现任何的问题,实在没有办法的我想了一个最笨的方法,就是在所有请求数据的地方打了一个断点,最后debug了一遍。然而结果是我难以预料的radioGroup中默认选中时会走一次setOnCheckedChangeListener方法,而我则是在每一次点击单选按钮进行筛选时走接口,所以导致数据重复。

那么问题找到了该怎么解决呢?首先我们能想到点击走接口和默认选中走
setOnCheckedChangeListener 方法继而走接口在本质上有什么区别,很显然区别就是差了一个手势操作。接下来请看代码:

View view = LayoutInflater.from(context).inflate(R.layout.popwindow_type, null);
RadioGroup rgType = (RadioGroup) view.findViewById(R.id.rg_type);
rbAny = (RadioButton) view.findViewById(R.id.rb_any);
rgType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
View checkView = group.findViewById(checkedId);
if (!checkView.isPressed()) {
return;
}
switch (checkedId) {
case R.id.rb_any:
mPropertyType = "";
ckType.setText("Type");

mCurrentPage = 1;
mDatas.clear();
mReachLastPositionCount = 0;
mRefreshType = 0;
getData();
break;

case R.id.rb_condo:
mPropertyType = "1";
ckType.setText("Condo");

mCurrentPage = 1;
mDatas.clear();
mReachLastPositionCount = 0;
mRefreshType = 0;
getData();
break;

case R.id.rb_hose:
mPropertyType = "2";
ckType.setText("House");

mCurrentPage = 1;
mDatas.clear();
mReachLastPositionCount = 0;
mRefreshType = 0;
getData();
break;
}
pwType.dismiss();
}
});

return view;

其实最重要的就是下面这一段:

 View checkView = group.findViewById(checkedId);
if (!checkView.isPressed()) {
return;
}

这样就完美解决了上述问题了。

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/24972.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者sunshine的打赏,我们会更加努力!    如果您想成为作者,请点我

发表我的评论
取消评论

表情