如何选中和取消单个单选按钮

4

我有一个问题,需要在单击时选择和取消选择单个单选按钮,setOnCheckChangeListner()仅在第一次起作用,以下是我尝试过的代码。

radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
           @Override
           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
               if(isChecked) radioButton.setChecked(false);
               else radioButton.setChecked(true);
           }
       });

你想要做什么? - Khemraj Sharma
3个回答

11

我使用设置单选按钮的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
你正在生成一个无限循环。这将导致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);

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接