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

时间:2018-01-14 08:38:28

标签: android android-checkbox

当我使用上述代码并选择male复选框时,我只能选中male复选框。如果取消选中female复选框,则无法选择male

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
        }
    }
});

3 个答案:

答案 0 :(得分:0)

取消选中此复选框时,只需添加其他条件。

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听众做同样的事。

答案 1 :(得分:0)

当您停用View时,除非您再次启用它,否则它将永远不会检测到Click或Touch等任何事件。因此,对于您的情况,禁用是不必要的,只需以编程方式取消选中复选框即可。

所以改变这一行:

checkboxfemale.setEnabled(false);

对此:

checkboxfemale.setChecked(false);

同时更改此行:

checkboxmale.setEnabled(false);

对此:

checkboxmale.setChecked(false);

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

答案 2 :(得分:0)

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

enter image description here

布局文件

<?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>

类文件

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;
                    }
                }
            }
        });

    }