【问题标题】:CheckBox return only false even it is checked(ticked)CheckBox 仅返回 false 即使它被选中(勾选)
【发布时间】:2019-10-14 00:49:09
【问题描述】:

在我的应用程序中,有 2 个复选框来获取用户的类型(例如:学生或教师)。我知道我应该使用单选按钮而不是复选框,但我在教程中的问题要求使用复选框(所以请暂时忽略单选按钮)。

即使我选中了一个复选框,isChecked() 方法也会返回 false。

这里是xml

        android:id="@+id/chkTeacher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="157dp"
        android:layout_marginLeft="157dp"
        android:layout_marginTop="56dp"
        android:text="Teacher"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/regPassword" />

    <CheckBox
        android:id="@+id/chkStudent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="157dp"
        android:layout_marginLeft="157dp"
        android:layout_marginTop="20dp"
        android:text="Student"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/chkTeacher" />

这里是编码


    EditText username, password;
    CheckBox teacher, student;
    DBHelper dbHelper = new DBHelper(this);
    String type;

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

        username = findViewById(R.id.regUserName);
        password = findViewById(R.id.regPassword);
        teacher = (CheckBox) findViewById(R.id.chkTeacher);
        student = (CheckBox) findViewById(R.id.chkStudent);

        if (teacher.isChecked() == true){
            type = "teacher";
        }
        else{
            type = "student";
        }
    }

我该如何解决这个问题?感谢您宝贵的时间!

【问题讨论】:

  • but my question in tutorial asked to use a checkbox 是的。但只有一个。不是两个。再试一次。重来。只有教师复选框可以。一切从阅读开始。

标签: java android checkbox


【解决方案1】:

好吧,由于有两个不同的复选框,您必须同时使用这两个复选框,并且您还必须触发另一个复选框的状态。希望下面这段代码sn-p能帮助你实现你想要的。

    teacher = (CheckBox) findViewById(R.id.chkTeacher);
    student = (CheckBox) findViewById(R.id.chkStudent);

    if (teacher.isChecked() == true){
        student.setchecked(false);
        type = "teacher";
    }
    if (student.isChecked() == true) {
        teacher.setchecked(false);
        type = "student";
    }

或者你可以像这样使用setOnCheckedChangeListener

result = findViewById(R.id.tv_res);
    teacher =  findViewById(R.id.cb_tec);
    student =  findViewById(R.id.cb_std);
    teacher.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
    {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        {
            if (isChecked)
            {
                if (student.isChecked()) student.setChecked(false);
                type = "teacher";
            }
            result.setText(type);

        }
    });
    student.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
    {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        {
            if (isChecked)
            {
                if (teacher.isChecked()) teacher.setChecked(false);
                type = "student";
            }
            result.setText(type);
        }
    });

尝试第二个解决方案,它正在检查:


请看一下,让我知道它是否有效。

【讨论】:

  • 还是一样。我检查了“老师”,但最后“类型”为空。顺便说一句,谢谢你的帮助!
  • 哦!我的错。 @ManujayaPremathilaka 我已经更新了我的答案。请检查。
  • SetOnCheckChangeListner() 解决了我的问题。感谢您的帮助!
  • 那很好。 @ManujayaPremathilaka 请将我的答案标记为正确答案。谢谢
【解决方案2】:
Implement onCheckChangeListener
teacher = (CheckBox) findViewById(R.id.chkTeacher);
        student = (CheckBox) findViewById(R.id.chkStudent);

  teacher.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){

    type = "teacher";
        }
        else{
            type = "student";
        }
     }
        });

学生 .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @覆盖 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked){

type = "student";
    }
    else{
        type = "teacher";
    }
 }
    });

【讨论】:

  • 现在只对“老师”有效。我想我也应该为“学生”实现一个 setOnCheckedChangeListner 。不管怎样,谢谢你的帮助!
  • 是的,您也必须为学生复选框实施
【解决方案3】:

对于每一个复选框只需做这个简单的事情

myCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
        if (isChecked){
            // do something
        }else {
            //do something
        }
    }
}
);

【讨论】:

  • setOnCheckChangeListner 工作。感谢您的帮助!
  • 如果您发现这是正确的答案,请投票给这个答案。只需点击向上箭头
猜你喜欢
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
相关资源
最近更新 更多