我想使用一个使用复选框来选择男性或女性
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;
}
}
}
});
}
当我使用上面的代码和 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;
}
}
}
});
}