我一直在努力解决RadioButton的程序性检查问题,RadioButton位于RadioGroup中。似乎单个check()
调用会引发三个事件 - 一个用于第一个RadioButton,两个用于第二个,这是我的目标。同时点击界面中的第二个RadioButton只会出现一个事件,这是正确的。
那么,有没有办法避免多次事件提升?
public class RadiogroupActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
RadioGroup r = (RadioGroup) findViewById(R.id.radioGroup1);
RadioButton b = (RadioButton) findViewById(R.id.radio1);
r.setOnCheckedChangeListener(onPromobuttonsClick);
r.check(R.id.radio1);
}
private OnCheckedChangeListener onPromobuttonsClick = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Log.d("x", "x");
}
};
}
答案 0 :(得分:41)
那么,有没有办法避免多次事件提升?
改为呼叫b.setChecked(true);
。
快速查看source code确认RadioGroup#check()
确实调用了OnCheckChangedListener三次......
奇怪的怪癖。
答案 1 :(得分:3)
只需在dependencies {
compile 'com.android.support:support-v4:23.3.0'
}
方法中发布您的r.setOnCheckedChangeListener(onPromobuttonsClick);
行。这对我有用。
答案 2 :(得分:0)
所以这是一个旧的,但我也有类似的行为。我找到的解决方法是调用toggle()
的{{1}}方法,而不是RadioButton
的{{1}}方法。
所以在这个例子中,你只需要交换
check()
与
RadioGroup
因为r.check(R.id.radio1);
已经是ID为b.toggle();
的视图。
答案 3 :(得分:0)
当我想记录单选按钮按下的分析时,我遇到了这个问题,但是使用.check()
处理无线电组呼叫的方式导致onCheckedChangeListener
被多次调用(发送的次数过多)事件)。
我按以下方式处理它,每次点击只能获得一个事件:
// create listeners so we don't duplicate the creation in for loop
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// whatever you want to do here
}
};
// add on click listener to all radio buttons
int buttonCount = buttonGroup.getChildCount();
for (int i = 0; i < buttonCount; i++) {
if (buttonGroup.getChildAt(i) instanceof RadioButton) {
buttonGroup.getChildAt(i).setOnClickListener(onClickListener);
}
}