每当单击单选按钮时更改单选组的选择
Change selection of radio group whenever a radio button is clicked
我有一个自定义单选组,里面有两个单选按钮,我想要更改它的选择,即使用户点击选中的单选按钮也是如此。
目前它是这样工作的:
如您所见,如果 (off) 被选中并且我点击它,没有任何反应。我希望它将选择更改为 (on)。
我试过这样使用 OnClickListener:
final RadioButton btn_on = view.findViewById(R.id.on);
final RadioButton btn_off = view.findViewById(R.id.off);
final View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if(radio_group.getCheckedRadioButtonId()==R.id.on)
{
radio_group.check(R.id.off);
}
if(radio_group.getCheckedRadioButtonId()==R.id.off)
{
radio_group.check(R.id.on);
}
}
};
btn_on.setOnClickListener(listener);
btn_off.setOnClickListener(listener);
但这行不通..还有其他方法吗?
我相信这应该有效:
boolean fromClickListener = false;
boolean fromCheckedChange = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RadioGroup radio_group = findViewById(R.id.radio_group);
final RadioButton btn_on = findViewById(R.id.on);
final RadioButton btn_off = findViewById(R.id.off);
radio_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (fromClickListener)
return;
fromCheckedChange = true;
}
});
final View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (fromCheckedChange) {
fromCheckedChange = false;
return;
}
boolean clickedOn = (((RadioButton) v) == btn_on);
fromClickListener = true;
btn_on.setChecked(!clickedOn);
btn_off.setChecked(clickedOn);
fromClickListener = false;
}
};
btn_on.setOnClickListener(listener);
btn_off.setOnClickListener(listener);
}
我有一个自定义单选组,里面有两个单选按钮,我想要更改它的选择,即使用户点击选中的单选按钮也是如此。
目前它是这样工作的:
如您所见,如果 (off) 被选中并且我点击它,没有任何反应。我希望它将选择更改为 (on)。
我试过这样使用 OnClickListener:
final RadioButton btn_on = view.findViewById(R.id.on);
final RadioButton btn_off = view.findViewById(R.id.off);
final View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if(radio_group.getCheckedRadioButtonId()==R.id.on)
{
radio_group.check(R.id.off);
}
if(radio_group.getCheckedRadioButtonId()==R.id.off)
{
radio_group.check(R.id.on);
}
}
};
btn_on.setOnClickListener(listener);
btn_off.setOnClickListener(listener);
但这行不通..还有其他方法吗?
我相信这应该有效:
boolean fromClickListener = false;
boolean fromCheckedChange = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RadioGroup radio_group = findViewById(R.id.radio_group);
final RadioButton btn_on = findViewById(R.id.on);
final RadioButton btn_off = findViewById(R.id.off);
radio_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (fromClickListener)
return;
fromCheckedChange = true;
}
});
final View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (fromCheckedChange) {
fromCheckedChange = false;
return;
}
boolean clickedOn = (((RadioButton) v) == btn_on);
fromClickListener = true;
btn_on.setChecked(!clickedOn);
btn_off.setChecked(clickedOn);
fromClickListener = false;
}
};
btn_on.setOnClickListener(listener);
btn_off.setOnClickListener(listener);
}