Продолжать, только если выполняется одно ИЛИ другое условие - PullRequest
0 голосов
/ 21 февраля 2019

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

Когда пользователь нажимает да, он получает один набор полей EditText, если он нажимает нет, он получает другой набор.Любой из вариантов включает одну и ту же кнопку продолжения, но мне нужно проверить, что заполнен только один из двух наборов, прежде чем переходить к следующему действию.

    bContinue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (myYesSection.isShown() && valueCombined.getText().toString().isEmpty()){
                Toast.makeText(getApplicationContext(), "Please enter the combined score.", Toast.LENGTH_LONG).show();
            }
            if (myNoSection.isShown() && valueOne.getText().toString().isEmpty() || valueTwo.getText().toString().isEmpty() || valueThree.getText().toString().isEmpty()){
                Toast.makeText(getApplicationContext(), "Please fill out all fields.", Toast.LENGTH_LONG).show();
            }
            else{
                Intent toNextActivity = new Intent(getApplicationContext(), QuestionThree.class);
                startActivity(toNextActivity);
            }
        }
    });

В действии, если valueCombined заполнено, тост составляет «Пожалуйста, заполните все поля». и пользователь не переходит к следующему действию.Если valueCombined заполнено, мне не нужно заполнять другие поля.

Заполнение valueOne, valueTwo, и valueThree позволяет открыть следующее действие, но тост за «Пожалуйста, введите объединенный счет».

Что я должен изменить, чтобы для нажатия кнопки требовалось только одно из двух условий?

Обновить рабочий код Спасибо @Andreas за урок.Это проверяет именно то, что мне нужно, и не выдает неправильный тост, если на дисплее отображается неправильный набор условий:

   bContinue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            int count = 0;
            if (combinedValue.getText().toString().isEmpty()){
                if (myYesSection.isShown()) {
                    Toast.makeText(getApplicationContext(), "Please enter combined score.", Toast.LENGTH_LONG).show();
                }
                count++;
            }
            if (valueOne.getText().toString().isEmpty() || valueTwo.getText().toString().isEmpty() || valueThree.getText().toString().isEmpty()){
                if (myNoSection.isShown()) {
                    Toast.makeText(getApplicationContext(), "Please fill out all fields.", Toast.LENGTH_LONG).show();
                }
                count++;
            }
            if (count == 1){
                Intent toNextActivity = new Intent(getApplicationContext(), QuestionThree.class);
                startActivity(toNextActivity);
            }

        }

1 Ответ

0 голосов
/ 21 февраля 2019

Если у вас есть, например, 3 условия, и вы хотите сделать что-то, только если ровно 1 из них является истинным, подсчитайте количество истинных условий:

int count = 0;
if (condition1)
    count++;
if (condition2)
    count++;
if (condition3)
    count++;
if (count == 1) {
    // Yay!
}

Или используйте троичные операторы для его сокращения:

if (1 == (condition1 ? 1 : 0) +
         (condition2 ? 1 : 0) +
         (condition3 ? 1 : 0)) {
    // Yay!
}

Если у вас есть только 2 условия для проверки, используйте оператор Exclusive-OR :

if (condition1 ^ condition2) {
    // Yay!
}

JLS 15.22.2.Логические логические операторы &, ^ и | определяют оператор следующим образом:

значение результата равно true, если значения операнда различны;в противном случае результат будет false.

...