有没有一种方法可以将2个或更多switch语句加在一起

时间:2020-10-22 13:35:06

标签: java android switch-statement

我已经研究和查找了数小时的不同表格,似乎找不到找到将多个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);

}



2 个答案:

答案 0 :(得分:1)

我真的不知道您要达到什么目的,也不认为崩溃与代码有关。但是我可以告诉你你的台词

total = ttband1 + ttband2;

将无法按预期工作。 在元素上添加侦听器(setOnCheckedChangeListener)将注册一个在满足侦听器条件时立即执行的函数。在这种情况下:选中或取消选中无线电组。

这意味着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);
          });

答案 1 :(得分:1)

我从未将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));
          });