我想使用一个使用复选框来选择男性或女性

i want to use a use checkbox for choosing either male or female

当我使用上面的代码和 select male 复选框时,我只能 select male 复选框。如果我取消选中 male 复选框,我将无法 select female

checkboxmale.setOnCheckedChangeListener (new CompoundButton.OnCheckedChangeListener() 
{                                                  
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
    if (isChecked) {                                                            
            Toast.makeText(DonorReg.this, "male", Toast.LENGTH_SHORT).show();                                                           
            checkboxfemale.setEnabled(false); // disable checkbox
        }
    }
});

checkboxfemale.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override public void onCheckedChanged(CompoundButton compoundButton, booleanisChecked) {
        if (isChecked) {
        Toast.makeText(DonorReg.this, "Female", Toast.LENGTH_SHORT).show();
        checkboxmale.setEnabled(false); // disable checkbox
        }
    }
});

当复选框未选中时,只需添加另一个条件。

checkboxmale.setOnCheckedChangeListener (new 
              CompoundButton.OnCheckedChangeListener() 
{                                                  
  @Override
  public void onCheckedChanged(CompoundButton compoundButton, boolean 
                                                      isChecked) {
   if (isChecked) {                                                            
         Toast.makeText(DonorReg.this, "male", Toast.LENGTH_SHORT).show();                                                           
         checkboxfemale.setEnabled(false); // disable checkbox
   }else{
         Toast.makeText(DonorReg.this, "Unchecked male", 
                                         Toast.LENGTH_SHORT).show();
         checkboxfemale.setenabled(true);
   }
  }
});

对女性 checkchange 侦听器执行相同操作。

当您禁用 View 时,它将永远不会检测到任何事件,例如点击或触摸,除非您再次启用它。因此,对于您的情况,无需禁用,只需以编程方式取消选中复选框即可。

所以去改变这一行:

checkboxfemale.setEnabled(false);

为此:

checkboxfemale.setChecked(false);

同时更改此行:

checkboxmale.setEnabled(false);

为此:

checkboxmale.setChecked(false);

从那里你的代码将按预期工作。

我想建议将其更改为单选按钮,因为用户一次只能 select 一个选项,而单选选项对此很有用。

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RadioGroup
        android:id="@+id/genderRadioGroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RadioButton
            android:id="@+id/maleRadioButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Male" />

        <RadioButton
            android:id="@+id/femaleRadioButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Female" />
    </RadioGroup>
</LinearLayout>

class 文件

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.RadioGroup;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RadioGroup genderRadioGroup = (RadioGroup) findViewById(R.id.genderRadioGroup);
        genderRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.maleRadioButton: {

                        break;
                    }
                    case R.id.femaleRadioButton: {

                        break;
                    }
                }
            }
        });

    }