【问题标题】:Continue only if one OR another condition is met仅在满足一个或另一个条件时继续
【发布时间】:2019-02-21 02:15:50
【问题描述】:

我有一个基本上是调查活动的应用程序。有些问题要求在继续之前填写一组条件或另一组条件。

当用户按下是时,他们会得到一组 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 被填写,toast 会出现 “请填写所有字段。” 并且用户不会进入下一个活动.如果填写了valueCombined,其他字段就不需要填写了。

填写valueOne, valueTwo,valueThree 可以打开下一个活动,但是敬酒“请输入综合分数。” em>

我必须更改什么,以便按下按钮只需要两个条件之一才能继续?

更新工作代码感谢@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);
            }

        }

【问题讨论】:

  • @Andreas 非常感谢,我会去那里看看。我不知道我自己是怎么没有遇到的(这就是我将条件命名为哈),我的搜索让我认为它应该是一个 switch case 场景。
  • 当我使用 getText().toString() 时这会起作用吗?还是我必须以某种方式表示正在填写的布尔字段?

标签: java android logic onclicklistener


【解决方案1】:

如果你有例如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. Boolean Logical Operators &, ^, and | 将操作符定义为:

如果操作数值不同,结果值为true;否则,结果为false

【讨论】:

  • 像魅力一样工作!安德烈亚斯,你让我很开心。
猜你喜欢
  • 2019-09-19
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多