CheckBox возвращает только false, даже если он отмечен галочкой - PullRequest
0 голосов
/ 13 октября 2019

В моем приложении есть 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";
        }
    }

Как я могу это исправить? Спасибо за ваше драгоценное время!

Ответы [ 3 ]

1 голос
/ 13 октября 2019

Ну, поскольку есть два разных флажка, вы должны работать с обоими этими флажками, и вы должны также вызвать состояние другого флажка. Надеюсь, что приведенный ниже фрагмент кода поможет вам добиться того, чего вы хотите.

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

Попробуйте second решение, которое работает, проверьте:

output

Пожалуйста, посмотрите и дайте мне знать, если это работает.

0 голосов
/ 13 октября 2019

Для каждого чекбокса просто сделайте эту простую вещь

myCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
        if (isChecked){
            // do something
        }else {
            //do something
        }
    }
}
);
0 голосов
/ 13 октября 2019
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";
        }
     }
        });

student .setOnCheckedChangeListener (new CompoundButton.OnCheckedChangeListener () {@Override public void onCheckedChanged (CompoundButton buttonView, логический isChecked) {if (isChecked) {

type = "student";
    }
    else{
        type = "teacher";
    }
 }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...