我遇到一个问题,例如单击时选择和取消选择一个单选按钮,setOnCheckChangeListner()仅在下面第一次起作用,这是我尝试过的代码。
radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) radioButton.setChecked(false);
else radioButton.setChecked(true);
}
});
答案 0 :(得分:5)
我已经使用单选按钮的set selected属性解决了这个问题。
final RadioButton radioButton = findViewById(R.id.radioButton);
radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!radioButton.isSelected()) {
radioButton.setChecked(true);
radioButton.setSelected(true);
} else {
radioButton.setChecked(false);
radioButton.setSelected(false);
}
}
});
答案 1 :(得分:1)
尝试使用首选项xml来保存点击事件,因为它就像小数据库一样。
How to create RadioButton group in preference.xml window?
答案 2 :(得分:0)
您正在生成一个无限循环。这将导致stackoverflow
错误。
因为您正在onCheckedChanged
内更改单选按钮的选中状态。
如果您需要更改检查状态,请单击一个按钮。
请勿更改onCheckedChanged
内部的支票状态
在某些情况下,您可能需要更改RadioButton的状态。为此,您将执行以下操作。
public class MainActivity extends AppCompatActivity {
RadioButton radioButton = null;
CompoundButton.OnCheckedChangeListener listener;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO: 8/6/2018 your logics
}
};
radioButton.setOnCheckedChangeListener(listener);
changeStatus(radioButton, true);
}
private void changeStatus(RadioButton radioButton, boolean status){
radioButton.setOnCheckedChangeListener(null);
radioButton.setChecked(status);
radioButton.setOnCheckedChangeListener(listener);
}
}
当您需要更改状态时,请致电
changeStatus(radioButton, true);