【问题标题】:Is there a way to add 2 or more switch statements together有没有办法一起添加 2 个或多个 switch 语句
【发布时间】:2020-10-22 13:35:06
【问题描述】:

我已经研究和查找了几个小时的不同表单,但似乎无法找到将多个 switch 语句添加在一起的方法。我已经缩短了开关,以便于发布。

我教过我可以在最后一次切换后进行添加,但似乎无法正常工作,因为应用程序崩溃且没有错误。

TextView tvanwser;
int total,ttband1,ttband2,ttband3;
 {
 radioGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {

                switch (checkedId)
                {
                    case R.id.rbBlack1:
                        band1.setBackgroundColor(getResources().getColor(R.color.colorBlack));
                        ttband1 = 0;
                        break;
                    case R.id.rbBrown1:
                        band1.setBackgroundColor(getResources().getColor(R.color.colorBrown));
                        ttband1 = 1;
                        break;
                    case R.id.rbOrange1:
                        band1.setBackgroundColor(getResources().getColor(R.color.colorOrange));
                        ttband1 = 3;
                        break;
               }
              });

 radioGroup2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {

                switch (checkedId)
                {
                    case R.id.rbBlack2:
                        band2.setBackgroundColor(getResources().getColor(R.color.colorBlack));
                         ttband2 = 2;
                        break;
                    case R.id.rbBrown2:
                        band2.setBackgroundColor(getResources().getColor(R.color.colorBrown));
                          ttband2 = 3;
                        break;
                    case R.id.rbOrange2:
                        band2.setBackgroundColor(getResources().getColor(R.color.colorOrange));
                        ttband2 = 4;
                        break;
}
});


total = ttband1 + ttband2;
tvAnswer.setText(total);

}



【问题讨论】:

  • the app crashes with no error. 这听起来不正确,你看过你的日志吗
  • 我不认为你的 switch case 是导致你的应用崩溃的问题。
  • 你需要通过“加在一起”来解释你的意思
  • 我有 3 个 RadioGroups,每个 RadioGroups 有 5 个单选按钮。因此,当您单击每个组中的 1 个按钮时,它会将它们加在一起并输出答案@HasinduDahanayake

标签: java android switch-statement


【解决方案1】:

我真的不知道您想要实现什么,也不认为您的崩溃与您的代码有关。但我可以看出你的台词

total = ttband1 + ttband2;

不会按您的意愿工作。 在元素上添加侦听器 (setOnCheckedChangeListener) 将注册一个函数,该函数在达到侦听器的条件时立即执行。在这种情况下:只要选中或取消选中 radiogroup。

这意味着 ttband1 和 ttband2 的值仅在您与 UI 元素交互时更改。

total = ttband1 + ttband2;
tvAnswer.setText(total);

但是,您的最后两行代码将在添加侦听器后立即执行。此时您的值 ttband1 和 ttband2 未修改,可能为 0。

要在每次更改 ttband1 或 ttband2 的值时保持最新,您需要将这些行移到侦听器函数中。

 radioGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            switch (checkedId)
            {
                case R.id.rbBlack1:
                    band1.setBackgroundColor(getResources().getColor(R.color.colorBlack));
                    ttband1 = 0;
                    break;
                case R.id.rbBrown1:
                    band1.setBackgroundColor(getResources().getColor(R.color.colorBrown));
                    ttband1 = 1;
                    break;
                case R.id.rbOrange1:
                    band1.setBackgroundColor(getResources().getColor(R.color.colorOrange));
                    ttband1 = 3;
                    break;
           }

           total = ttband1 + ttband2;
           tvAnswer.setText(total);
          });

【讨论】:

  • 我遇到的问题是每个单选按钮执行 2 个任务。 1. 更改按钮的颜色和 2. 更新公式。颜色的变化有效,但公式的更新无效。我将总数添加到每个开关中,但它仍然崩溃
  • @kyle 请提供错误消息。仅从您发布的代码中,我们无法真正说出它崩溃的原因。该问题可能与其他问题有关。
  • 引起:android.content.res.Resources$NotFoundException:字符串资源 ID #0x0 在 android.content.res.Resources.getText(Resources.java:402) 在 android.widget.TextView。 setText(TextView.java:6942) at edu.kylegilmartin.ass1.MainActivity.onCreate(MainActivity.java:193)
  • @kyle 检查 MainActivity.java 中的第 193 行您可能没有正确定义 TextView
  • 致命异常:主进程:edu.kylegilmartin.ass1,PID:5619 android.content.res.Resources$NotFoundException:字符串资源 ID #0x0 at android.content.res.Resources.getText(Resources .java:402) 在 edu.kylegilmartin.ass1.MainActivity$1.onCheckedChanged(MainActivity.java:111) 在 android.widget.RadioGroup.setCheckedId(RadioGroup.java) 的 android.widget.TextView.setText(TextView.java:6942) :200) 在 android.widget.RadioGroup.access$600(RadioGroup.java:63) 在 android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:385)
【解决方案2】:

我从未将 int 转换为字符串女巫导致应用崩溃

   total = total1 + total2 + total3;
   tvanwser.setText(String.valueOf(total));
 radioGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            switch (checkedId)
            {
                case R.id.rbBlack1:
                    band1.setBackgroundColor(getResources().getColor(R.color.colorBlack));
                    ttband1 = 0;
                    break;
                case R.id.rbBrown1:
                    band1.setBackgroundColor(getResources().getColor(R.color.colorBrown));
                    ttband1 = 1;
                    break;
                case R.id.rbOrange1:
                    band1.setBackgroundColor(getResources().getColor(R.color.colorOrange));
                    ttband1 = 3;
                    break;
           }

                total1 = ttband1;
                total = total1 + total2 + total3;
                tvanwser.setText(String.valueOf(total));
          });




 radioGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            switch (checkedId)
            {
                case R.id.rbBlack1:
                    band1.setBackgroundColor(getResources().getColor(R.color.colorBlack));
                    ttband2 = 0;
                    break;
                case R.id.rbBrown1:
                    band1.setBackgroundColor(getResources().getColor(R.color.colorBrown));
                    ttband2 = 1;
                    break;
                case R.id.rbOrange1:
                    band1.setBackgroundColor(getResources().getColor(R.color.colorOrange));
                    ttband2 = 3;
                    break;
           }

                total2 = ttband2;
                total = total1 + total2 + total3;
                tvanwser.setText(String.valueOf(total));
          });

【讨论】:

    猜你喜欢
    • 2021-03-02
    • 2021-07-30
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多